摘要:运行一下我们的代码,然后刷新下数据库,可看到数据已经保存到中了查看数据库内容很清晰,每一项都有保存
抓取论坛、贴吧这种多分页的信息时,没接触scrapy之前,是前确定有多少页,使用for循环抓取。这方法略显笨重,使用scrapy则可以直接组合下一页的链接,然后传给request持续进行抓取,一直到没有下一页链接为止。
还是以官方教程的网站为例子,先分析下元素:
可以看到下一页的标签:
Next
其中的href属性值/page/2与www.quotes.toscrape.com组合起来就是下一页的网址,同理第二页next的href属性值组合起来就是第三页,因此只要我们判断出是否有下一页的关键字,就可以进行持续抓取。
上代码:
import scrapy class myspider(scrapy.Spider): # 设置爬虫名称 name = "get_quotes" # 设置起始网址 start_urls = ["http://quotes.toscrape.com"] def parse(self, response): #使用 css 选择要素进行抓取,如果喜欢用BeautifulSoup之类的也可以 #先定位一整块的quote,在这个网页块下进行作者、名言,标签的抓取 for quote in response.css(".quote"): yield { "author" : quote.css("small.author::text").extract_first(), "tags" : quote.css("div.tags a.tag::text").extract(), "content" : quote.css("span.text::text").extract_first() } # 使用xpath获取next按钮的href属性值 next_href = response.xpath("//li[@class="next"]/a/@href").extract_first() # 判断next_page的值是否存在 if next_href is not None: # 如果下一页属性值存在,则通过urljoin函数组合下一页的url: # www.quotes.toscrape.com/page/2 next_page = response.urljoin(next_href) #回调parse处理下一页的url yield scrapy.Request(next_page,callback=self.parse)
下面是处理结果:
可以看到一直抓取了10页,此网站也只有10页
整个网站的名人名言就全部抓取到了,是不是很方便
现在只是把抓取得到的只是打印到屏幕上,并没有存储起来,接下来我们使用Mongodb进行存储,mongodb的优点可自行google,这里就不说了。从官网下载,参考官方安装教程进行配置安装。
要使用Mongodb需要pymongo,直接pip install pymongo
先演示下直接存储,当做Mongodb存储例子,实际不推荐这么使用:
import scrapy # 导入pymongo import pymongo class myspider(scrapy.Spider): # 设置爬虫名称 name = "get_quotes" # 设置起始网址 start_urls = ["http://quotes.toscrape.com"] # 配置client,默认地址localhost,端口27017 client = pymongo.MongoClient("localhost",27017) # 创建一个数据库,名称store_quote db_name = client["store_quotes"] # 创建一个表 quotes_list = db_name["quotes"] def parse(self, response): #使用 css 选择要素进行抓取,如果喜欢用BeautifulSoup之类的也可以 #先定位一整块的quote,在这个网页块下进行作者、名言,标签的抓取 for quote in response.css(".quote"): # 将页面抓取的数据存入mongodb,使用insert yield self.quotes_list.insert({ "author" : quote.css("small.author::text").extract_first(), "tags" : quote.css("div.tags a.tag::text").extract(), "content" : quote.css("span.text::text").extract_first() }) # 使用xpath获取next按钮的href属性值 next_href = response.xpath("//li[@class="next"]/a/@href").extract_first() # 判断next_page的值是否存在 if next_href is not None: # 如果下一页属性值存在,则通过urljoin函数组合下一页的url: # www.quotes.toscrape.com/page/2 next_page = response.urljoin(next_href) #回调parse处理下一页的url yield scrapy.Request(next_page,callback=self.parse)
如果使用的是pycharm编辑器,有一个mongodb插件,可以方便的查看数据库,Mongo plugin,在plugin里面添加
添加之后,重启pycharm,可以在setting -> other setting里面看到Mongo Servers,点击Mongo servers配置mongodb:
Label随意填写,server url已经有默认,test一下,连接成功确认即可,完成之后,可在pycharm左侧看到插件mongo explorer,点击展开可看到数据库。
OK运行一下我们的代码,
scrapy crawl get_quotes
然后刷新下数据库,可看到数据已经保存到mongodb中了
查看数据库内容:
很清晰,每一项都有保存
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/38563.html
摘要:最近真是忙的吐血。。。上篇写的是直接在爬虫中使用,这样不是很好,下使用才是正经方法。 最近真是忙的吐血。。。 上篇写的是直接在爬虫中使用mongodb,这样不是很好,scrapy下使用item才是正经方法。在item中定义需要保存的内容,然后在pipeline处理item,爬虫流程就成了这样: 抓取 --> 按item规则收集需要数据 -->使用pipeline处理(存储等) 定义it...
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...
摘要:学习爬虫的背景了解。但是搜索引擎蜘蛛的爬行是被输入了一定的规则的,它需要遵从一些命令或文件的内容,如标注为的链接,或者是协议。不同领域不同背景的用户往往具有不同的检索目的和需求,搜索引擎无法提供针对具体某个用户的搜索结果。 学习python爬虫的背景了解。 大数据时代数据获取方式 如今,人类社会已经进入了大数据时代,数据已经成为必不可少的部分,可见数据的获取非常重要,而数据的获取的方式...
阅读 821·2021-11-15 11:37
阅读 3577·2021-11-11 16:55
阅读 3254·2021-11-11 11:01
阅读 982·2019-08-30 15:43
阅读 2718·2019-08-30 14:12
阅读 658·2019-08-30 12:58
阅读 3352·2019-08-29 15:19
阅读 1960·2019-08-29 13:59