成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析

瀏覽:227日期:2022-06-22 14:32:32
一、環(huán)境準備 python3.8.3 pycharm 項目所需第三方包

pip install scrapy fake-useragent requests selenium virtualenv -i https://pypi.douban.com/simple

1.1 創(chuàng)建虛擬環(huán)境

切換到指定目錄創(chuàng)建

virtualenv .venv

創(chuàng)建完記得激活虛擬環(huán)境

1.2 創(chuàng)建項目

scrapy startproject 項目名稱

1.3 使用pycharm打開項目,將創(chuàng)建的虛擬環(huán)境配置到項目中來1.4 創(chuàng)建京東spider

scrapy genspider 爬蟲名稱 url

1.5 修改允許訪問的域名,刪除https:

二、問題分析

爬取數(shù)據(jù)的思路是先獲取首頁的基本信息,在獲取詳情頁商品詳細信息;爬取京東數(shù)據(jù)時,只返回40條數(shù)據(jù),這里,作者使用selenium,在scrapy框架中編寫下載器中間件,返回頁面所有數(shù)據(jù)。爬取的字段分別是:

商品價格

商品評數(shù)

商品店家

商品SKU(京東可直接搜索到對應(yīng)的產(chǎn)品)

商品標題

商品詳細信息

三、spider

import reimport scrapyfrom lianjia.items import jd_detailItemclass JiComputerDetailSpider(scrapy.Spider): name = ’ji_computer_detail’ allowed_domains = [’search.jd.com’, ’item.jd.com’] start_urls = [’https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91&suggest=1.def.0.base&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91&page=1&s=1&click=0’] def parse(self, response):lls = response.xpath(’//ul[@class='gl-warp clearfix']/li’)for ll in lls: item = jd_detailItem() computer_price = ll.xpath(’.//div[@class='p-price']/strong/i/text()’).extract_first() computer_commit = ll.xpath(’.//div[@class='p-commit']/strong/a/text()’).extract_first() computer_p_shop = ll.xpath(’.//div[@class='p-shop']/span/a/text()’).extract_first() item[’computer_price’] = computer_price item[’computer_commit’] = computer_commit item[’computer_p_shop’] = computer_p_shop meta = {’item’: item } shop_detail_url = ll.xpath(’.//div[@class='p-img']/a/@href’).extract_first() shop_detail_url = ’https:’ + shop_detail_url yield scrapy.Request(url=shop_detail_url, callback=self.detail_parse, meta=meta)for i in range(2, 200, 2): next_page_url = f’https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91&suggest=1.def.0.base&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91&page={i}&s=116&click=0’ yield scrapy.Request(url=next_page_url, callback=self.parse) def detail_parse(self, response):item = response.meta.get(’item’)computer_sku = response.xpath(’//a[@class='notice J-notify-sale']/@data-sku’).extract_first()item[’computer_sku’] = computer_skucomputer_title = response.xpath(’//div[@class='sku-name']/text()’).extract_first().strip()computer_title = ’’.join(re.findall(’S’, computer_title))item[’computer_title’] = computer_titlecomputer_detail = response.xpath(’string(//ul[@class='parameter2 p-parameter-list'])’).extract_first().strip()computer_detail = ’’.join(re.findall(’S’, computer_detail))item[’computer_detail’] = computer_detailyield item四、item

class jd_detailItem(scrapy.Item): # define the fields for your item here like: computer_sku = scrapy.Field() computer_price = scrapy.Field() computer_title = scrapy.Field() computer_commit = scrapy.Field() computer_p_shop = scrapy.Field() computer_detail = scrapy.Field()五、setting

import randomfrom fake_useragent import UserAgentua = UserAgent()USER_AGENT = ua.randomROBOTSTXT_OBEY = FalseDOWNLOAD_DELAY = random.uniform(0.5, 1)DOWNLOADER_MIDDLEWARES = { ’lianjia.middlewares.jdDownloaderMiddleware’: 543}ITEM_PIPELINES = { ’lianjia.pipelines.jd_csv_Pipeline’: 300}六、pipelines

class jd_csv_Pipeline: # def process_item(self, item, spider): # return item def open_spider(self, spider):self.fp = open(’./jd_computer_message.xlsx’, mode=’w+’, encoding=’utf-8’)self.fp.write(’computer_skutcomputer_titletcomputer_p_shoptcomputer_pricetcomputer_committcomputer_detailn’) def process_item(self, item, spider):# 寫入文件try: line = ’t’.join(list(item.values())) + ’n’ self.fp.write(line) return itemexcept: pass def close_spider(self, spider):# 關(guān)閉文件self.fp.close()七、middlewares

class jdDownloaderMiddleware: def process_request(self, request, spider):# 判斷是否是ji_computer_detail的爬蟲# 判斷是否是首頁if spider.name == ’ji_computer_detail’ and re.findall(f’.*(item.jd.com).*’, request.url) == []: options = ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome(options=options) driver.get(request.url) for i in range(0, 15000, 5000):driver.execute_script(f’window.scrollTo(0, {i})’)time.sleep(0.5) body = driver.page_source.encode() time.sleep(1) return HtmlResponse(url=request.url, body=body, request=request)return None八、使用jupyter進行簡單的處理和分析

其他文件:百度停用詞庫、簡體字文件下載第三方包

!pip install seaborn jieba wordcloud PIL -i https://pypi.douban.com/simple

8.1導(dǎo)入第三方包

import reimport osimport jiebaimport wordcloudimport pandas as pdimport numpy as npfrom PIL import Imageimport seaborn as snsfrom docx import Documentfrom docx.shared import Inchesimport matplotlib.pyplot as pltfrom pandas import DataFrame,Series

8.2設(shè)置可視化的默認字體和seaborn的樣式

sns.set_style(’darkgrid’)plt.rcParams[’font.sans-serif’] = [’SimHei’]plt.rcParams[’axes.unicode_minus’] = False

8.3讀取數(shù)據(jù)

df_jp = pd.read_excel(’./jd_shop.xlsx’)

8.4篩選Inteli5、i7、i9處理器數(shù)據(jù)

def convert_one(s): if re.findall(f’.*?(i5).*’, str(s)) != []:return re.findall(f’.*?(i5).*’, str(s))[0] elif re.findall(f’.*?(i7).*’, str(s)) != []:return re.findall(f’.*?(i7).*’, str(s))[0] elif re.findall(f’.*?(i9).*’, str(s)) != []:return re.findall(f’.*?(i9).*’, str(s))[0]df_jp[’computer_intel’] = df_jp[’computer_detail’].map(convert_one)

8.5篩選筆記本電腦的屏幕尺寸范圍

def convert_two(s): if re.findall(f’.*?(d+.d+英寸-d+.d+英寸).*’, str(s)) != []:return re.findall(f’.*?(d+.d+英寸-d+.d+英寸).*’, str(s))[0]df_jp[’computer_in’] = df_jp[’computer_detail’].map(convert_two)

8.6將評論數(shù)轉(zhuǎn)化為整形

def convert_three(s): if re.findall(f’(d+)萬+’, str(s)) != []:number = int(re.findall(f’(d+)萬+’, str(s))[0]) * 10000return number elif re.findall(f’(d+)+’, str(s)) != []:number = re.findall(f’(d+)+’, str(s))[0]return numberdf_jp[’computer_commit’] = df_jp[’computer_commit’].map(convert_three)

8.7篩選出需要分析的品牌

def find_computer(name, s): sr = re.findall(f’.*({name}).*’, str(s))[0] return srdef convert(s): if re.findall(f’.*(聯(lián)想).*’, str(s)) != []:return find_computer(’聯(lián)想’, s) elif re.findall(f’.*(惠普).*’, str(s)) != []:return find_computer(’惠普’, s) elif re.findall(f’.*(華為).*’, str(s)) != []:return find_computer(’華為’, s) elif re.findall(f’.*(戴爾).*’, str(s)) != []:return find_computer(’戴爾’, s) elif re.findall(f’.*(華碩).*’, str(s)) != []:return find_computer(’華碩’, s) elif re.findall(f’.*(小米).*’, str(s)) != []:return find_computer(’小米’, s) elif re.findall(f’.*(榮耀).*’, str(s)) != []:return find_computer(’榮耀’, s) elif re.findall(f’.*(神舟).*’, str(s)) != []:return find_computer(’神舟’, s) elif re.findall(f’.*(外星人).*’, str(s)) != []:return find_computer(’外星人’, s)df_jp[’computer_p_shop’] = df_jp[’computer_p_shop’].map(convert)

8.8刪除指定字段為空值的數(shù)據(jù)

for n in [’computer_price’, ’computer_commit’, ’computer_p_shop’, ’computer_sku’, ’computer_detail’, ’computer_intel’, ’computer_in’]: index_ls = df_jp[df_jp[[n]].isnull().any(axis=1)==True].index df_jp.drop(index=index_ls, inplace=True)

8.9查看各品牌的平均價格

plt.figure(figsize=(10, 8), dpi=100)ax = sns.barplot(x=’computer_p_shop’, y=’computer_price’, data=df_jp.groupby(by=’computer_p_shop’)[[’computer_price’]].mean().reset_index())for index,row in df_jp.groupby(by=’computer_p_shop’)[[’computer_price’]].mean().reset_index().iterrows(): ax.text(row.name,row[’computer_price’] + 2,round(row[’computer_price’],2),color='black',ha='center')ax.set_xlabel(’品牌’)ax.set_ylabel(’平均價格’)ax.set_title(’各品牌平均價格’)boxplot_fig = ax.get_figure()boxplot_fig.savefig(’各品牌平均價格.png’, dpi=400)

python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析

8.10 查看各品牌的價格區(qū)間

plt.figure(figsize=(10, 8), dpi=100)ax = sns.boxenplot(x=’computer_p_shop’, y=’computer_price’, data=df_jp.query(’computer_price>500’))ax.set_xlabel(’品牌’)ax.set_ylabel(’價格區(qū)間’)ax.set_title(’各品牌價格區(qū)間’)boxplot_fig = ax.get_figure()boxplot_fig.savefig(’各品牌價格區(qū)間.png’, dpi=400)

python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析

8.11 查看價格與評論數(shù)的關(guān)系

df_jp[’computer_commit’] = df_jp[’computer_commit’].astype(’int64’)ax = sns.jointplot(x='computer_commit', y='computer_price', data=df_jp, kind='reg', truncate=False,color='m', height=10)ax.fig.savefig(’評論數(shù)與價格的關(guān)系.png’)

python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析

8.12 查看商品標題里出現(xiàn)的關(guān)鍵詞

import imageio# 將特征轉(zhuǎn)換為列表ls = df_jp[’computer_title’].to_list()# 替換非中英文的字符feature_points = [re.sub(r’[^a-zA-Zu4E00-u9FA5]+’,’ ’,str(feature)) for feature in ls]# 讀取停用詞stop_world = list(pd.read_csv(’./百度停用詞表.txt’, engine=’python’, encoding=’utf-8’, names=[’stopwords’])[’stopwords’])feature_points2 = []for feature in feature_points: # 遍歷每一條評論 words = jieba.lcut(feature) # 精確模式,沒有冗余.對每一條評論進行jieba分詞 ind1 = np.array([len(word) > 1 for word in words]) # 判斷每個分詞的長度是否大于1 ser1 = pd.Series(words) ser2 = ser1[ind1] # 篩選分詞長度大于1的分詞留下 ind2 = ~ser2.isin(stop_world) # 注意取反負號 ser3 = ser2[ind2].unique() # 篩選出不在停用詞表的分詞留下,并去重 if len(ser3) > 0:feature_points2.append(list(ser3))# 將所有分詞存儲到一個列表中wordlist = [word for feature in feature_points2 for word in feature]# 將列表中所有的分詞拼接成一個字符串feature_str = ’ ’.join(wordlist) # 標題分析font_path = r’./simhei.ttf’shoes_box_jpg = imageio.imread(’./home.jpg’)wc=wordcloud.WordCloud( background_color=’black’, mask=shoes_box_jpg, font_path = font_path, min_font_size=5, max_font_size=50, width=260, height=260,)wc.generate(feature_str)plt.figure(figsize=(10, 8), dpi=100)plt.imshow(wc)plt.axis(’off’)plt.savefig(’標題提取關(guān)鍵詞’)

python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析

8.13 篩選價格在4000到5000,聯(lián)想品牌、處理器是i5、屏幕大小在15寸以上的數(shù)據(jù)并查看價格

df_jd_query = df_jp.loc[(df_jp[’computer_price’] <=5000) & (df_jp[’computer_price’]>=4000) & (df_jp[’computer_p_shop’]=='聯(lián)想') & (df_jp[’computer_intel’]=='i5') & (df_jp[’computer_in’]=='15.0英寸-15.9英寸'), :].copy()plt.figure(figsize=(20, 10), dpi=100)ax = sns.barplot(x=’computer_sku’, y=’computer_price’, data=df_jd_query)ax.set_xlabel(’聯(lián)想品牌SKU’)ax.set_ylabel(’價格’)ax.set_title(’酷睿i5處理器屏幕15寸以上各SKU的價格’)boxplot_fig = ax.get_figure()boxplot_fig.savefig(’酷睿i5處理器屏幕15寸以上各SKU的價格.png’, dpi=400)

python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析

8.14 篩選價格在4000到5000,戴爾品牌、處理器是i7、屏幕大小在15寸以上的數(shù)據(jù)并查看價格

df_jp_daier = df_jp.loc[(df_jp[’computer_price’] <=5000) & (df_jp[’computer_price’]>=4000) & (df_jp[’computer_p_shop’]=='戴爾') & (df_jp[’computer_intel’]=='i7') & (df_jp[’computer_in’]=='15.0英寸-15.9英寸'), :].copy()plt.figure(figsize=(10, 8), dpi=100)ax = sns.barplot(x=’computer_sku’, y=’computer_price’, data=df_jp_daier)ax.set_xlabel(’戴爾品牌SKU’)ax.set_ylabel(’價格’)ax.set_title(’酷睿i7處理器屏幕15寸以上各SKU的價格’)boxplot_fig = ax.get_figure()boxplot_fig.savefig(’酷睿i7處理器屏幕15寸以上各SKU的價格.png’, dpi=400)

python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析

8.15 不同Intel處理器品牌的價格

plt.figure(figsize=(10, 8), dpi=100)ax = sns.barplot(x=’computer_p_shop’, y=’computer_price’, data=df_jp, hue=’computer_intel’)ax.set_xlabel(’品牌’)ax.set_ylabel(’價格’)ax.set_title(’不同酷睿處理器品牌的價格’)boxplot_fig = ax.get_figure()boxplot_fig.savefig(’不同酷睿處理器品牌的價格.png’, dpi=400)

python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析

8.16 不同尺寸品牌的價格

plt.figure(figsize=(10, 8), dpi=100)ax = sns.barplot(x=’computer_p_shop’, y=’computer_price’, data=df_jp, hue=’computer_in’)ax.set_xlabel(’品牌’)ax.set_ylabel(’價格’)ax.set_title(’不同尺寸品牌的價格’)boxplot_fig = ax.get_figure()boxplot_fig.savefig(’不同尺寸品牌的價格.png’, dpi=400)

python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析

以上就是python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進行簡單處理和分析的詳細內(nèi)容,更多關(guān)于python 爬取京東數(shù)據(jù)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: 京東 Python
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲综合激情另类小说区| 久久国产免费看| 精品一区二区三区免费| 久久狠狠婷婷| 亚洲精品第一国产综合野| 国产一区自拍视频| 久久精品欧美一区二区三区不卡| 国产成人综合网站| 欧美日韩www| 免费观看久久久4p| 狼狼综合久久久久综合网| 亚洲国产一二三| 国产一区二区三区久久久久久久久 | 成人avav在线| 欧美一三区三区四区免费在线看| 国产一区二区在线视频| 欧美精品久久99久久在免费线| 狠狠色丁香久久婷婷综| 91精品视频网| 成+人+亚洲+综合天堂| 欧美成人性福生活免费看| av午夜一区麻豆| 国产亚洲人成网站| 欧美巨乳波霸| 亚洲美女区一区| 妖精视频成人观看www| 亚洲一区二区三区四区在线观看| 午夜一区二区三区不卡视频| 午夜亚洲福利老司机| 久久狠狠久久综合桃花| 日韩成人免费在线| 欧美日韩国产一二三| 国产精品一二三四区| 日韩三级中文字幕| av电影天堂一区二区在线观看| 久久久久久电影| 国内精品久久国产| 亚洲精品国产精华液| 免费看亚洲片| 日本在线观看不卡视频| 在线免费观看一区| 国产精品一区在线观看乱码| 精品伦理精品一区| 精品69视频一区二区三区Q| 亚洲女同女同女同女同女同69| 亚洲在线观看| 麻豆一区二区三| 91精品国产综合久久久久久| heyzo一本久久综合| 欧美国产精品一区二区| 在线一区视频| 欧美aa在线视频| 欧美一级电影网站| 欧美成人有码| 一区二区三区日韩欧美精品 | www.性欧美| 国产精品不卡一区二区三区| 99一区二区| 美女一区二区三区在线观看| 欧美一区二区三区性视频| 欧美福利一区| 亚洲午夜精品17c| 欧美另类高清zo欧美| 91麻豆福利精品推荐| 一区二区免费看| 欧美乱妇23p| 国内一区二区三区| 日韩福利电影在线| 日韩欧美成人激情| 亚洲免费久久| 激情久久久久久久久久久久久久久久| 久久蜜桃av一区精品变态类天堂| 亚洲国产黄色| 久久99久久99| www国产精品av| 国产欧美成人| 国产高清成人在线| 亚洲人被黑人高潮完整版| 在线免费观看日韩欧美| 欧美在线播放一区| 亚洲va韩国va欧美va精品| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲黄色小说网站| 欧美日韩中文另类| 欧美日本二区| 美女被吸乳得到大胸91| 久久精品人人做人人综合| 日韩国产欧美在线视频| 91麻豆精品国产无毒不卡在线观看| 欧美日本一区二区视频在线观看 | 欧美人成在线| 免费成人av在线| 国产日本欧洲亚洲| 色久综合一二码| 91视频国产资源| 日韩中文字幕91| 国产午夜精品福利| 91福利视频在线| 国产精品国产三级国产专区53| 免费欧美高清视频| 国产精品久久久久影院老司 | 亚洲人精品一区| 欧美丰满高潮xxxx喷水动漫| 在线欧美日韩| 丁香婷婷综合网| 亚洲v中文字幕| 中文字幕精品—区二区四季| 欧洲视频一区二区| 在线日本成人| 成人av在线影院| 婷婷久久综合九色综合绿巨人| 欧美激情综合在线| 欧美疯狂性受xxxxx喷水图片| 日韩一级在线| 99久久精品免费观看| 亚洲成av人片在线| 久久久国际精品| 欧美日韩另类国产亚洲欧美一级| 亚洲免费大片| 99免费精品在线观看| 婷婷丁香激情综合| 国产精品福利一区二区三区| 欧美一区二区三区四区高清| 久久精品女人| 国产一区激情| 成人高清免费观看| 六月丁香婷婷色狠狠久久| 亚洲色图一区二区三区| 精品国产一二三| 欧美体内she精视频| 亚洲高清资源| 91亚洲资源网| 国产精品亚洲一区二区三区在线 | 亚洲成人综合在线| 国产精品三级av| 2021国产精品久久精品| 欧美三级电影网站| 久久精品国产99精品国产亚洲性色| 国内精品久久久久久久97牛牛 | 三级亚洲高清视频| 亚洲欧美欧美一区二区三区| 精品播放一区二区| 91精品在线免费| 91国产免费观看| 久久久久欧美| 国产日产精品一区二区三区四区的观看方式 | 一区二区三区美女| 国产精品久久久久久久久搜平片| 欧美精品一区二区三区在线| 欧美一区二区三级| 制服丝袜国产精品| 欧美探花视频资源| 久久亚洲高清| 欧美综合77777色婷婷| 亚洲精品一级| 欧美久久视频| 不卡电影免费在线播放一区| 韩国欧美国产1区| 久久99精品久久久久婷婷| 午夜精品久久久久久久| 夜夜亚洲天天久久| 亚洲黄色av一区| 亚洲欧美偷拍卡通变态| 国产精品国产三级国产aⅴ原创| 国产日韩欧美精品综合| 国产欧美日产一区| 国产视频在线观看一区二区三区| 久久综合国产精品| 久久久久久久久蜜桃| 久久女同性恋中文字幕| 久久综合久久综合久久| 日韩亚洲国产中文字幕欧美| 欧美一三区三区四区免费在线看| 在线电影欧美成精品| 精品视频色一区| 欧美日韩亚洲另类| 欧美日韩国产在线观看| 欧美群妇大交群中文字幕| 精品视频在线视频| 在线不卡欧美精品一区二区三区| 欧美久久久久中文字幕| 91精品蜜臀在线一区尤物| 日韩亚洲欧美一区| 26uuu久久天堂性欧美| 国产丝袜美腿一区二区三区| 国产精品日韩精品欧美在线| 国产精品日日摸夜夜摸av| 亚洲欧洲日产国码二区| 亚洲精品中文字幕在线观看| 亚洲国产精品久久一线不卡| 丝瓜av网站精品一区二区 | 国产在线视频一区二区三区| 国产馆精品极品| 99久久久国产精品| 欧美涩涩视频| 亚洲理伦在线| 久久高清免费观看| 欧美系列一区二区| 日韩精品中文字幕在线不卡尤物| 日韩精品一区二区在线|