📜  Scrapy-请求和响应(1)

📅  最后修改于: 2023-12-03 15:20:01.252000             🧑  作者: Mango

Scrapy-请求和响应

Scrapy是一个Python开发的高级网络爬虫框架,它可以执行自定义的处理规则和管道,方便地从网络中的不同站点提取数据。Scrapy提供了强大的请求和响应(Response)的概念,方便开发者抓取网页数据。

请求(Requests)

在Scrapy中,请求是由Spider定义并发送到引擎进行处理的。请求包含一个URL和一些可选参数(如HTTP方法、请求头部等)。

发送请求

Scrapy提供了方便的方式来发送请求,只需在Spider中创建Request对象并将其传递给引擎即可:

import scrapy

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://www.example.com']

    def parse(self, response):
        # 处理响应
        pass

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url=url, callback=self.parse)

上面的代码创建了一个名为“myspider”的Spider,并发送了一个名为“http://www.example.com”的请求。在请求中,还可以包含其他选项,如请求头和请求方法等。

yield scrapy.Request(url=url, headers=headers, method='POST')
请求传递参数

如果您需要传递参数,可以在URL中添加查询字符串或在请求主体中添加表单数据:

yield scrapy.FormRequest(url='http://www.example.com/login', 
                         formdata={'username': 'scrapy', 'password': 'password'},
                         callback=self.parse)
响应(Response)

Scrapy的响应对象封装了网页的内容,并包含许多有用的属性和方法,以便对响应进行处理。

响应内容

Scrapy的响应对象有许多属性,其中最有用的属性之一是text。这个属性包含了响应中的HTML文档:

def parse(self, response):
    html = response.text
    # 处理HTML

响应对象还有其他属性,如statusheaders等,可以方便地获得HTTP状态码和响应头部信息。

XPath和CSS选择器

Scrapy提供了内置的XPath和CSS选择器以方便地提取响应中的数据。

def parse(self, response):
    # 使用XPath
    title = response.xpath('//title/text()').get()
    # 使用CSS选择器
    links = response.css('a::attr(href)').getall()
总结

Scrapy的请求和响应提供了方便的方式来获取和处理网页数据。这些对象使得爬虫开发者可以更轻松地从不同的站点获取所需的数据。同时,Scrapy还提供了许多其他功能,如中间件、扩展和管道等,以便更好地控制爬取过程。