- 首先介绍Scrapy中最重要的组件爬虫(Spider),它用于构建HTTP请求并从网页中提取数据;接着介绍使用Item封装数据;最后介绍使用Pipeline组件对数据进行处理,如数据清理、去重及持久化存储等。
1.使用Spider提取数据
- Scrapy网络爬虫编程的核心就是爬虫(Spider)组件,它其实是一个继承于Spider的类,主要功能是封装一个发送给网站服务器的HTTP请求,解析网站返回的网页提取数据。
- 如何避免爬虫网站识别出来导致被禁呢?可以重写(override)start_requests()方法,手动生成一个功能更强大的Request对象。因为伪装浏览器、自动登录等功能都是在Request对象中设置的。
- 引擎是怎么知道要将下载好的页面发送给parse()方法而不是其他方法?能否自定义这个方法?引擎之所以能自动定位,是因为在Request对象中,指定了解数据的回调函数,而默认情况下,Request指定的解析函数就是parse()方法。
from scrapy import Request
from scrapy.spiders import Spider
class HotSalesSpider(Spider):
name = 'hot'
qidian_headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}
def start_requests(self):
url = "https://www.qidian.com/rank/hotsales?style=1&page=1"
yield Request(url,headers=self.qidian_headers,callback=self.qidian_parse)
def qidian_parse(self,response):
list_selector = response.xpath("//div[@class='book-mid-info']")
for one_selector in list_selector:
name = one_selector.xpath("h4/a/text()").extract()[0]
author = one_selector.xpath("p[1]/a[1]/text()").extract()[0]
type = one_selector.xpath("p[1]/a[2]/text()").extract()[0]
form = one_selector.xpath("p[1]/span/text()").extract()[0]
hot_dict