电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

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

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

1.1 創建虛擬環境

切換到指定目錄創建

virtualenv .venv

創建完記得激活虛擬環境

1.2 創建項目

scrapy startproject 項目名稱

1.3 使用pycharm打開項目,將創建的虛擬環境配置到項目中來1.4 創建京東spider

scrapy genspider 爬蟲名稱 url

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

二、問題分析

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

商品價格

商品評數

商品店家

商品SKU(京東可直接搜索到對應的產品)

商品標題

商品詳細信息

三、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):# 關閉文件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導入第三方包

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設置可視化的默認字體和seaborn的樣式

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

8.3讀取數據

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

8.4篩選Inteli5、i7、i9處理器數據

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將評論數轉化為整形

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’.*(聯想).*’, 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) elif re.findall(f’.*(外星人).*’, str(s)) != []:return find_computer(’外星人’, s)df_jp[’computer_p_shop’] = df_jp[’computer_p_shop’].map(convert)

8.8刪除指定字段為空值的數據

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爬取京東筆記本電腦數據并進行簡單處理和分析

8.10 查看各品牌的價格區間

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(’價格區間’)ax.set_title(’各品牌價格區間’)boxplot_fig = ax.get_figure()boxplot_fig.savefig(’各品牌價格區間.png’, dpi=400)

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

8.11 查看價格與評論數的關系

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(’評論數與價格的關系.png’)

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

8.12 查看商品標題里出現的關鍵詞

import imageio# 將特征轉換為列表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(’標題提取關鍵詞’)

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

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

df_jd_query = df_jp.loc[(df_jp[’computer_price’] <=5000) & (df_jp[’computer_price’]>=4000) & (df_jp[’computer_p_shop’]=='聯想') & (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(’聯想品牌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爬取京東筆記本電腦數據并進行簡單處理和分析

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

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爬取京東筆記本電腦數據并進行簡單處理和分析

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爬取京東筆記本電腦數據并進行簡單處理和分析

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爬取京東筆記本電腦數據并進行簡單處理和分析

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

標簽: 京東 Python
相關文章:
主站蜘蛛池模板: 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 猪I型/II型胶原-五克隆合剂-细胞冻存培养基-北京博蕾德科技发展有限公司 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | 耐高温电缆厂家-远洋高温电缆 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 超声骨密度仪,双能X射线骨密度仪【起草单位】,骨密度检测仪厂家 - 品源医疗(江苏)有限公司 | 喷砂机厂家_自动除锈抛丸机价格-成都泰盛吉自动化喷砂设备 | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | atcc网站,sigma试剂价格,肿瘤细胞现货,人结肠癌细胞株购买-南京科佰生物 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 金刚网,金刚网窗纱,不锈钢网,金刚网厂家- 河北萨邦丝网制品有限公司 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 广州小程序开发_APP开发公司_分销商城系统定制_小跑科技 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 厌氧工作站-通用型厌氧工作站-上海胜秋科学仪器有限公司 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 2025第九届世界无人机大会| 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 小型手持气象站-空气负氧离子监测站-多要素微气象传感器-山东天合环境科技有限公司 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 西子馋火锅鸡加盟-太原市龙城酉鼎餐饮管理有限公司 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 北京三友信电子科技有限公司-ETC高速自动栏杆机|ETC机柜|激光车辆轮廓测量仪|嵌入式车道控制器 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 铁素体测量仪/检测仪/铁素体含量测试仪-苏州圣光仪器有限公司 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 |