irpas技术客

【python】【爬虫】Scrapy Crawl自动爬虫【获取新浪新闻为例】_Banana忍冬_crawl爬虫

网络投稿 5450

Scrapy自动爬虫(crawl模板)【scrapy genspider -t crawl news news.sina.com.cn】

Crawl自动爬虫适用:

对有规律的网站进行自动爬取

Crawl自动爬虫总体思路: 先获取初始网址,获取初始网址中的所有链接,筛选出目标链接并进行访问从访问的链接中返回需要的信息在访问的链接中重复(1)(2)

Crawl自动爬虫与Basic基础爬虫的区别

模板中多了一个rules()方法,包括有参数:LinkExtractor链接提取,其参数allow指定从Start_url中提取链接的规则;callback指定回调处理函数;follow指定是否执行步骤(3)

目标:

获取当日(2021-06-19)的放置在新浪新闻首页的新闻

分析:

对于当日的新闻,新闻连接中均出现了2021-06-19的时间字样,不管前面的前缀为/c /x。故链接筛选规则可设置为该时间字样。

进入某一新闻首页后,<title>标签下的文本内容为该新闻网页的题目,大部分新闻的网址放在带有 og:url属性的<meta>标签中,但有的新闻源码中没有放本篇新闻的链接。

代码 items.py

声明存放链接和标题的link和title属性

import scrapy class FirstscrapyItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title = scrapy.Field() # 提取新闻标题 link = scrapy.Field() # 提取链接 pass settings.py

开放并设置模拟服务器的报文头,取消爬虫协议

autosinanews.py

使用crawl模板生成的爬虫文件。【scrapy genspider -t crawl news news.sina.com.cn】

import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from firstScrapy.items import FirstscrapyItem from scrapy.http import Request class AutosinanewsSpider(CrawlSpider): name = 'autosinanews' allowed_domains = ['news.sina.com.cn'] start_urls = ['http://news.sina.com.cn/'] # rules指定提取链接的规则 # allow 筛选链接的规则,设置筛选出带有时间字样的链接 # callback 指定回调函数 # follow指定链接是否跟进,即在子页是否继续往下走 rules = ( Rule(LinkExtractor(allow=r'2021-06-19'), callback='parse_item', follow=False), ) # 指定在当前页中提取链接的规则 # 首次模拟浏览器 def start_requests(self): ua = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36"} yield Request('http://news.sina.com.cn', headers = ua) def parse_item(self, response): item = FirstscrapyItem() #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get() #item['name'] = response.xpath('//div[@id="name"]').get() #item['description'] = response.xpath('//div[@id="description"]').get() pat_title = "/html/head/title/text()" pat_link = "/html/head/meta[@property='og:url']/@content" item["title"] = response.xpath(pat_title).get() item["link"] = response.xpath(pat_link).get() #print(item["title"]) #print(item["link"]) #print("") return item

pipelines.py

后续的数据处理,本爬虫因为仅测试使用,可以不修改pipelines,在爬虫文件中执行输出。

# Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html # useful for handling different item types with a single interface from itemadapter import ItemAdapter class FirstscrapyPipeline: def process_item(self, item, spider): # 输出容器内容 for i in range(0, len(item["title"])): print(item["title"]) print(item["link"]) print(" ") return item


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #crawl爬虫