当前位置:   article > 正文

使用CrawlSpider 自动爬取网页_basic类型爬虫 crawl类型爬虫怎么爬取网站

basic类型爬虫 crawl类型爬虫怎么爬取网站

Scrapy中提供了自动爬取网页的CrawlSpider。

一、创建CrawlSpider 项目

1、(1)运行创建项目命令:

python -m scrapy startproject mycwpit

(2)进入爬虫项目:cd mycwpit;运行创建爬虫命令:

python -m scrapy genspider -t crawl steve sohu.com

这里我们使用了名为crawl 的爬虫模版,创建了爬虫文件steve.py;

(3)查看steve.py 文件:

start_urls:设置了要爬取的起始网址;

rules:设置了自动爬行的规则;

LinkExtractor:链接提取器,一般可以用来提取页面中满足条件的链接,供下一次爬取;

parse_item方法:用于编写爬虫的处理过程。

二、链接提取器

  1. rules = (
  2. Rule(LinkExtractor(allow=('.*?/n.*?shtml'),allow_domains=('sohu.com')), callback='parse_item', follow=True),
  3. )

LinkExtrator中的参数及含义:

allow:提取符合对应正则表达式的链接;

deny:不提取符合对应正则表达式的链接;

restrict_xpaths:使用Xpath表达式与allow共同作用提取出同时符合对应Xpath表达式和正则表达式的链接;

allow_domains:允许提取的域名,比如我们想只提取某个域名下的链接时会用到;

deny_domains:不允许提取的域名。

Rule中的其他参数:follow:默认为True,表示跟进,循环爬取;设置为False第一次循环后断开。

三、爬取搜狐网站中的新闻

1、工作流程:

2、编写items.py 文件

  1. import scrapy
  2. class MycwpijItem(scrapy.Item):
  3. #新闻标题
  4. name=scrapy.Field()
  5. #新闻链接
  6. title=scrapy.Field()

3、编写pipelines.py 文件

对爬取到的新闻标题和新闻对应链接进行输出:

  1. class MycwpijPipeline(object):
  2. def process_item(self, item, spider):
  3. print(item["name"])
  4. print(item["title"])
  5. print("-----------------------------")
  6. return item

修改settings.py 文件:

  1. # Configure item pipelines
  2. # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
  3. ITEM_PIPELINES = {
  4. 'mycwpij.pipelines.MycwpijPipeline': 300,
  5. }

4、编写爬虫文件steve.py:

  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. from scrapy.linkextractors import LinkExtractor
  4. from scrapy.spiders import CrawlSpider, Rule
  5. from mycwpij.items import MycwpijItem
  6. class WeitaoSpider(CrawlSpider):
  7. name = 'steve'
  8. allowed_domains = ['sohu.com']
  9. start_urls = ['http://news.sohu.com/']
  10. rules = (
  11. Rule(LinkExtractor(allow=('.*?/n.*?shtml'),allow_domains=('sohu.com')), callback='parse_item', follow=True),
  12. )
  13. def parse_item(self, response):
  14. i = MycwpijItem()
  15. i["name"]=response.xpath("/html/head/title/text()").extract()
  16. i["title"]=response.xpath("//link[@rel='canonical']/@href").extract()
  17. return i

5、在项目文件路径下打开终端,运行命令:

python -m scrapy crawl steve --nolog

会进行链接的跟进,会一直根据网站中的链接爬取下去,终止爬行:Ctrl+C。

6、爬行结果:

四、另一种利用循环爬取:运用了Scrapy的basic模版

参考示例代码:

  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. from scrapy import Request
  4. from zhaopin.items import ZhaopinItem
  5. class SteveSpider(scrapy.Spider):
  6. name = 'steve'
  7. #allowed_domains = ['zhaopin.com']
  8. start_urls = ['https://sou.zhaopin.com/?jl=801']
  9. def parse(self, response):
  10. item = ZhaopinItem()
  11. item["jobName"] = response.xpath("//div[@class='jobName']/a/span[@class='job_title']/@title").extract()
  12. item['companyName'] = response.xpath("//div[@class='companyName']/a[@class='company-title']/@title").extract()
  13. item['salary'] = response.xpath("//p[@class='job_saray']/text()").extract()
  14. item['job_demand'] = response.xpath("//ul[@class='job_demand']/li[@class='demand_item']/text()").extract()
  15. item['companyType'] = response.xpath("//div[@class='companyDesc']/span[@class='info_item']/text()").extract()
  16. #返回item
  17. yield item
  18. for i in range(1, 3):
  19. url="https://sou.zhaopin.com/?p="+str(i)+"&jl=801"
  20. #通过yield返回Request,并且指定要爬取的网址和回调函数
  21. #实现自动爬取
  22. yield Request(url, callback=self.parse)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/599589
推荐阅读
相关标签
  

闽ICP备14008679号