python的scrapy requests与response对象怎么用

发布时间:2022-05-16 13:53:34 作者:iii
来源:亿速云 阅读:204

这篇文章主要介绍了python的scrapy requests与response对象怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python的scrapy requests与response对象怎么用文章都会有所收获,下面我们一起来看看吧。

Request 对象

在 scrapy 中 Request 对象代表着请求,即向服务器发送数据,该对象的构造函数原型如下所示:

def __init__(self, url, callback=None, method='GET', headers=None, body=None,
                 cookies=None, meta=None, encoding='utf-8', priority=0,
                 dont_filter=False, errback=None, flags=None, cb_kwargs=None)

其中只有 url为必填参数,具体说明如下:

Response 对象

scrapy中,Response对象表示请求响应对象,即服务器返回给爬虫的数据,其构造函数原型如下:

def __init__(self,url,status=200,headers=None,body=b"",
    flags=None, request=None,certificate=None,ip_address=None,protocol=None,
)

与 Request 一致,该方法中仅 url 为必填参数,不过一般很少用到手动创建一个 Response 对象实例的场景。

Response 类衍生出来一个子类 TextResponse,然后 TextResponse又衍生出来 HtmlResponse和 XmlResponse

Response 包括的属性和方法如下:

属性清单:

方法清单:

关于 Request 和 Response 类的相关源码,可以在 scrapy\http 目录查看。

ItemPipeline

数据管道在 scrapy 中主要对数据进行处理,在实际开发过程中需要注意一个 ItemPipeline,只负责一种功能的数据处理,当然在 scrapy 中你可以创建多个 ItemPipeline

ItemPipeline的使用场景:

在编写ItemPipeline类的时候,不需要其继承特定类,只需要实现固定名称的方法即可,在之前的博客中已经反复提及,自定义ItemPipeline类需要实现 process_item()open_spider()close_spider()方法,其中 process_item()必须实现。

process_item()返回值是 Item 或者字典,也可以返回一个 DropItem类型的数据,此时该项 item 会被忽略,不会被后面的 ItemPipeline处理。

过滤数据的逻辑实现

如果希望在 ItemPipeline实现过滤数据,使用集合即可,发现集合中已经存在数据了,抛出 DropItem即可。

LinkExtractor 提取链接

scrapy 编写的爬虫在提取大量链接时,使用LinkExtractor会更加便捷。 使用 from scrapy.linkextractors import LinkExtractor导入 LinkExtractor,该类的构造函数如下所示:

def __init__(self, allow=(), deny=(),allow_domains=(),deny_domains=(),restrict_xpaths=(),
        tags=('a', 'area'),attrs=('href',),canonicalize=False,unique=True,process_value=None,
        deny_extensions=None,restrict_css=(),strip=True,restrict_text=None,
    )

其中各个参数说明如下:

下面的代码是提取 Response 对象中的链接,需要使用 extract_links() 方法。

def parse(self, response):
    link = LinkExtractor()
    all_links = link.extract_links(response)
    print(all_links)

爬虫编码时间

本次的目标站点是:淘数据-行业报告 

python的scrapy requests与response对象怎么用

 完整代码编写如下所示,使用 LinkExtractor 提取页面超链接。

import scrapy
from tao.items import TaoItem
from scrapy.linkextractors import LinkExtractor
class TaoDataSpider(scrapy.Spider):
    name = 'tao_data'
    allowed_domains = ['taosj.com']
    start_urls = [f'https://www.taosj.com/articles?pageNo={page}' for page in range(1, 124)]
    def parse(self, response):
        link_extractor = LinkExtractor(allow=r'www\.taosj\.com/articles/\d+', restrict_css='a.report-page-list-title')
        links = link_extractor.extract_links(response)
        for l in links:
            item = {
                "url": l.url,
                "text": l.text
            }
            yield item

关于“python的scrapy requests与response对象怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python的scrapy requests与response对象怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 如何判断python requests response值
  2. response对象的使用(实例讲解)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python scrapy requests

上一篇:web正则表达式中.+?与.*?的区别是什么

下一篇:Java如何实现拓扑排序

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》