网络爬虫项目实战 课件2-2 购物Scrapy爬虫实战(项目实施)_第1页
网络爬虫项目实战 课件2-2 购物Scrapy爬虫实战(项目实施)_第2页
网络爬虫项目实战 课件2-2 购物Scrapy爬虫实战(项目实施)_第3页
网络爬虫项目实战 课件2-2 购物Scrapy爬虫实战(项目实施)_第4页
网络爬虫项目实战 课件2-2 购物Scrapy爬虫实战(项目实施)_第5页
已阅读5页,还剩26页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目2购物Scrapy爬虫项目网络爬虫实战项目式教程《网络爬虫项目实战》入门篇2.2任务分解2.1项目介绍2.3项目实施目录Content2.4课后练习2.5能力拓展2.3.1项目实施->数据采集(1)转到Tomcat安装目录下的bin目录,运行startup.bat后,打开Chrome,访问:50001/cellphone/list.html,显示网站首页,代表Tomcat运行正常。如下图所示。2.3.1项目实施->数据采集(2)打开AnacondaPrompt,转到PyCharm项目主目录(比如,c:\datacrawling\pyprojects)。(3)创建Scrapy空项目phonecrawler。(4)转到phonecrawler子目录,执行下面命令创建爬虫。其中,phone_spider是爬虫名称,是网站域名。>c:\datacrawling\pyprojects>scrapystartprojectphonecrawler>cdphonecrawler>scrapygenspiderphone_spider2.3.1项目实施->数据采集(5)打开PyCharm,打开项目phonecrawler,展开项目主目录下的子目录phonecrawler,项目结构如下图所示。2.3.1项目实施->数据采集(6)打开File->Settings->ProjectInterpreter,选择第1章安装的AnacondaPython编译器。如下图所示。2.3.1项目实施->数据采集(7)修改phone_spider.py,设置起始URL指向网站首页。#-*-coding:utf-8-*-importscrapyclassPhoneSpiderSpider(scrapy.Spider):name='phone_spider'allowed_domains=['']start_urls=[':50001/cellphone/list.html']defparse(self,response):

pass#encoding=utf-8fromscrapyimportcmdlineRUN_SCRAPY_COMMAND='scrapycrawlphone_spider-ophone_raw.csv'.split('')#注意:用1个空格分隔cmdline.execute(RUN_SCRAPY_COMMAND)(8)在项目根目录下New->PythonFile,创建startpoint.py,代码如下。2.3.1项目实施->数据采集(9)运行startpoint.py,结果如下图所示。2022-07-0808:36:28[scrapy.utils.log]INFO:Scrapy1.8.0started(bot:phonecrawler)2022-07-0808:36:28[scrapy.core.engine]DEBUG:Crawled(404)<GET:50001/robots.txt>(referer:None)2022-07-0808:36:28[protego]DEBUG:Ruleatline1withoutanyuseragenttoenforceiton.2022-07-0808:36:28[scrapy.core.engine]DEBUG:Crawled(200)<GET:50001/cellphone/list.html>(referer:None)2022-07-0808:36:28[scrapy.core.engine]INFO:Closingspider(finished)2022-07-0808:36:28[scrapy.core.engine]INFO:Spiderclosed(finished)2.3.1项目实施->数据采集(10)修改phonecrawler/items.py,PhonecrawlerItem类添加商品名称、评论数、经销商属性。#-*-coding:utf-8-*-#Defineherethemodelsforyourscrapeditems##Seedocumentationin:#/en/latest/topics/items.htmlimportscrapyclassPhonecrawlerItem(scrapy.Item):

#商品名称商品名称=scrapy.Field()#评价数量评价数量=scrapy.Field()#经销商经销商=scrapy.Field()2.3.1项目实施->数据采集(12)访问http://:50001/cellphone/list.html,右键打开检查->Network,查看User-Agent、cookie、referer属性值。如下图所示。2.3.1项目实施->数据采集(13)反注释phonecrawler/settings.py中DEFAULT_REQUEST_HEADERS部分,设置User-Agent。cookie和referer为空,不需要设置。DEFAULT_REQUEST_HEADERS={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/100.0.4896.127Safari/537.36'}2.3.1项目实施->数据采集(14)回到网站首页,然后点击鼠标右键,选择“检查”,在右边“Elements”窗口查找div元素,对照左边窗口的显示,找到各商品对应的页面元素。如下图所示。商品XPath:div[contains(@class,'product-box')]2.3.1项目实施->数据采集(15)鼠标停留在左面页面窗口中第1件商品的评价数,然后点击鼠标右键后,选择“检查”,查找评价数的XPath路径。如下图所示。评价数XPath相对路径:div[@class='res-info']/div/div[@class='info-evaluate']/a/i/text()2.3.1项目实施->数据采集(16)查看第4件商品的经销商。经销商XPath相对路径:div[@class='res-info']/div/a[contains(@class,'store-class')orcontains(@class,'store-name')]/text()查看第8件商品的经销商。并且2.3.1项目实施->数据采集(17)鼠标停留在左面页面窗口中的商品名称,然后点击鼠标右键后,选择“检查”,查找商品名称的XPath路径。如下图所示。商品名称XPath相对路径:div[@class='res-info']/div[@class='title-selling-point']/a/text()2.3.1项目实施->数据采集XPath常用规则在XPath中,有7种类型的节点:元素、属性、文本、命名空间、处理命令、注释、以及文档(根)节点。XPath文档时被作为节点树来对待的。树的根被称为文档节点或者根节点。(1)XPath基本语法(2)XPath谓词2.3.1项目实施->数据采集XPath常用规则(3)选取未知节点(4)“|”运算符实例2.3.1项目实施->数据采集(18)修改phone_spider.py,爬取网站首页。#-*-coding:utf-8-*-importreimportscrapyfromphonecrawler.itemsimportPhonecrawlerItemclassPhoneSpiderSpider(scrapy.Spider):name='phone_spider'allowed_domains=['']start_urls=[':50001/cellphone/list.html']defparse(self,response):

node_list=response.xpath("//div[contains(@class,'product-box')]")fornodeinnode_list:item=PhonecrawlerItem()#商品名字

name=node.xpath("./div[@class='res-info']/div[@class='title-selling-point']/a/text()").extract()#数据保护

name=name[0]iflen(name)>0else""#替换连续空格到单个空格

item['商品名称']=re.sub("\s+","",name)#评价数量

volume=node.xpath("./div[@class='res-info']/div/div[@class='info-evaluate']/a/i/text()").extract()#数据保护

item['评价数量']=volume[0]iflen(volume)>0else""#经销商

brand=node.xpath("./div[@class='res-info']/div/a[contains(@class,'store-class')orcontains(@class,'store-name')]/text()").extract()#数据保护

item['经销商']=brand[0]iflen(brand)>0else""#详情URLyielditem2.3.1项目实施->数据采集(19)运行startpoint.py,结果如下图所示。商品名称,经销商,评价数量vivoiQOO7传奇12+256G高通骁龙888+增强版LPDDR5120W超快闪充全感操控系统双路线性马达立体双扬UFS3.1双模5G全网通手机,自营,8700+vivoiQOONeo58+256G夜影黑5G新品,柠悦数码旗舰店,1.1万+AppleiPhone12ProMax,自营,4.9万+vivovivoiQOONeo58+256GB夜影黑5G新品手机,柠悦数码旗舰店,1.1万+vivovivoiQOONeo512+256GB云影蓝5G新品手机,柠悦数码旗舰店,1.1万+vivovivoiQOONeo512+256GB像素橙5G新品手机,柠悦数码旗舰店,1.1万+AppleiPhone12128G白色移动联通电信5G全网通,自营,21万+2.3.1项目实施->数据采集(20)回到网站首页,滑动页面到最底端,鼠标停留在页码“2”,然后点击鼠标右键后,选择“检查”,查看页码“2”的XPath路径。如下图所示。最大页码XPath路径://div[@id="bottom_pager"]/div/a[last()]/text()2.3.1项目实施->数据采集(21)完善phone_spider.py,定义list_base_url和offset,start_urls改变为可替换的模板,使爬虫具有翻页爬取功能。#-*-coding:utf-8-*-importreimportscrapyfromphonecrawler.itemsimportPhonecrawlerItemclassPhoneSpiderSpider(scrapy.Spider):name='phone_spider'allowed_domains=['']

list_base_url=":50001/cellphone/list#offset#.html"offset=0#页码偏移量

start_urls=[list_base_url.replace("#offset#","")]defparse(self,response):#更新最大页码

ifself.offset==0:page_num=response.xpath('//div[@id="bottom_pager"]/div/a[last()]/text()').extract()

#数据保护

self.max_pages=(int)(page_num[0])iflen(page_num)>0else0

……

#经销商

brand=node.xpath("./div[@class='res-info']/div/a[contains(@class,'store-class')orcontains(@class,'store-name')]/text()").extract()#数据保护

item['经销商']=brand[0]iflen(brand)>0else""#详情URLyielditem

#页码偏移量加1self.offset+=1#未走到最后一页就继续爬取

ifself.offset<self.max_pages:url=self.list_base_url.replace("#offset#",str(self.offset))yieldscrapy.Request(url,callback=self.parse)2.3.1项目实施->数据采集(22)运行startpoint.py,结果如下图所示。商品名称,经销商,评价数量vivoiQOO7传奇12+256G高通骁龙888+增强版LPDDR5120W超快闪充全感操控系统双路线性马达立体双扬UFS3.1双模5G全网通手机,自营,8700+省略商品名称,经销商,评价数量vivoiQOO7传奇12+256G高通骁龙888+增强版LPDDR5120W超快闪充全感操控系统双路线性马达立体双扬UFS3.1双模5G全网通手机,自营,8700+省略【购机送1年碎屏保】OPPOA8天青色4GB+128GB新品手机6.5英寸水滴屏4230mAh大电池后置AI三摄全网通4G全面屏拍照游戏智能手机oppoa8手机,时器数码专营店,2600+2.3.2项目实施->数据清洗(1)创建data_clean.py,读入phone_raw.csv到DataFrame类型。(2)忽略DataFrame包含的CSV头。(3)删除重复行。#encoding=utf-8importpandasaspd#读入CSV文件到Dataframe对象labels=["商品名称","经销商","评价数量"]df=pd.read_csv('phone_raw.csv',names=labels,encoding='utf-8')print(df.head())#删除第2次爬取生成的csv头df=df[df["评价数量"]!="评价数量"]print(df.head(5))#去重df=df.drop_duplicates()print("去重后记录行数:{}".format(df.shape[0]))2.3.2项目实施->数据清洗(4)建立包含“评价数量”、“单位”列的DataFrame。。(5)根据字段“单位”计算十进制的评价数。#字段“评价数量”裂变成两列:评价数(数字),单位pattern="(?P<评价数>\d*\.?\d*)(?P<单位>.+*)"comment_df=df["评价数量"].str.extract(pattern)print(comment_df.head())#去除评价数量后面的单位defextract_salary(x):ifx["单位"]=="万+":salary=int(eval(x["评价数"])*10000)else:salary=(int)(eval(x["评价数"]))returnsalary#应用extract_salary处理comment_df的每一行comment_df["评价数"]=comment_df.apply(extract_salary,axis=1)#更新原始DataFrame的字段“评价数”df["评价数量"]=comment_df["评价数"]

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论