scrapy分页抓取网页(制作爬虫(Spider)制作(Spider)())

优采云 发布时间: 2022-03-03 20:09

  scrapy分页抓取网页(制作爬虫(Spider)制作(Spider)())

  将网站安装到爬虫中,分为几个步骤:

  1.新建项目(项目)

  按住Shift键并在空目录中单击鼠标右键,选择“在此处打开命令窗口”,输入以下命令:

  >scrapystart项目豆瓣

  项目创建后,生成如下目录:

  

  用pycharm打开项目,看看:

  

  每个文件的作用:

  2.明确目标(项目)

  可以使用 scrapy.item.Item 类和使用 scrapy.item.Field 对象定义的属性来创建项目。

  接下来,我们开始构建项目模型(model)。在本例中,构建 items.py 如下:

  首先,我们想要的是:

  

  【注意】:

  爬取元素不需要声明模型,也可以在爬虫代码中直接显示爬取到的元素这种方式

  

  根据官方文档,Item是保存结构数据的地方。 Scrapy可以将解析结果以字典的形式返回,但是Python中的字典缺乏结构,在大型爬虫系统中非常不方便。 Item 提供了一个类似字典的 API。而且声明字段非常方便,很多Scrapy组件可以使用Item的其他信息。以后也方便管道对爬取的数据进行处理。

  3.做一个蜘蛛

  做一个爬虫,一般分为两个步骤:爬取-取走

  也就是说,首先你要获取整个页面的所有内容,然后取出对你有用的部分。

  3.1 次攀登

  Spider 是用户编写的用于从域(或域组)中抓取信息的类。定义用于下载的 URL 列表、用于跟踪链接的方案以及解析 Web 内容以提取项目的方法。

  要创建一个 Spider,你必须继承 scrapy.spider.BaseSpider 并定义三个强制属性:

  让我们编写第一个爬虫,命名为doubanspider.py,并将其保存在doubanspiders目录中。

  在豆瓣目录下按住shift右键,在此处打开命令窗口,输入:

  >scrapy爬豆瓣

  3.1.1 创建main.py并保存到豆瓣目录

  

  3.1.2 为避免被屏蔽,需要伪装,在settings.py中添加USER_AGENT

  USER_AGENT='Mozilla/5.0(Macintosh;IntelMacOSX10_8_3)AppleWebKit/536.5(KHTML,likeGecko)Chrome/19.0. 1084.54Safari/536.5'

  3.2 次拍摄

  使用 Xpath 进行解析。有关相关知识,请参阅 Xpath 部分。这里不赘述,只是给出一个大概的思路:F12检查元素,我们看页面代码,检查页面显示特性,比如要爬取的页面内容是否需要结合,替换空格等,同时如果出现分页情况,需要自动抓取下一页查看代码特征,发现几个问题:(1)标题分为两行,需要用for循环遍历。结合起来;(2)有些电影没有引号,需要考虑为空值;(3)的url分页不完整,需要抓取并填写完整的URL(要导入Request,from scrapy.http import Request),可以循环爬取。

  

  

  #-*-coding:utf-8-*-fromscrapy。蜘蛛importCrawlSpiderfromscrapy。选择器importSelectorfrom豆瓣。 itemsimportDoubanItemfromscrapy. httpimportRequestclassDouban(CrawlSpider):name="douban"start_urls=['.豆瓣。 com/top250']url='。豆瓣。 com/top250' defparse(self, response): #printresponse。 bodyitem=豆瓣项目()选择器=选择器(响应)#printselectorMovies=选择器。 xpath('//div[@class="info"]')#printMoviesforeachMoiveinMovies:title=eachMoive. xpath('div[@class="hd"]/a/span/text()').

  extract()# 合并两个名字 fullTitle=''foreachintitle:fullTitle+=eachmovieInfo=eachMoive. xpath('div[@class="bd"]/p/text()')。提取()星=每个电影。 xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')。 extract()[0]quote=eachMoive. xpath('div[@class="bd"]/p[@class="quote"]/span/text()'). extract()#quote可能为空,所以需要先判断 ifquote:quote=quote[0]else:quote=''#printfullTitle#printmovieInfo#printstar#printquoteitem['title']=fullTitleitem['movieInfo']= ';'。加入(movieInfo)item['star']=staritem['quote']=quoteielditemnextLink=selector。

  xpath('//span[@class="next"]/link/@href'). extract()#第10页是最后一页,没有下一页的链接 ifnextLink:nextLink=nextLink[0]printnextLinkyieldRequest(self.url+nextLink,callback=self.parse) ##递归传递的地址下一页对于这个函数本身,在爬回callback=self时注意韩老师提供的栗子这里二次分析的解释。解析

  4.存储内容(管道)

  保存信息最简单的方法是通过,主要有四种:JSON、JSON 行、CSV、XML。用最常用的JSON导出结果,命令如下:

  >scrapycrawldouban-oitems.json-tjson #-o后面是导出文件名,-t后面是导出类型。要导出结果,请使用文本编辑器打开 json 文件

  尝试导出为 csv 格式:

  >scrapycrawldouban-oiitems.csv-tcsv

  4.1 设置默认存储

  可以直接在settings.py文件中设置输出位置和文件类型,如下:

  FEED_URI=u'file:///E:/​​douban/douban.csv'FEED_FORMAT='CSV'

  

  5.运行爬虫(main.py)

  不同于直接运行的简单单线程爬虫程序,这里我们还需要运行一个main.py,需要自己手动生成。 main.py代码如下:

  

  运行结果:

  

  如果你想用抓取的物品做更复杂的事情,你可以写一个物品管道。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线