requests正常scrapy异常---终极解决方案

fiddler抓包进行对比

1、请求url:

requests会自动编码,scrapy不会自动编码,比如url中存在 “|”

2、headers:

scrapy默认有一些自定义的头部:Accept, Accept-Language

DEFAULT_REQUEST_HEADERS = {
   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
   'Accept-Language': 'en',
}

3、cookie传递

requests默认cookie不传递
scrapy默认cookie传递(COOKIES_ENABLED默认为true,相当于session模块),

4、cookie构造方式:

scrapy中cookie不能写到headers里,要单独写cookies=cookies_dict(新手最常见的错误)

5、post请求参数构造:

常见的几种post请求构造方法

最终对比数据包完全一致,即可成功

附:
requests加代理:
proxies = {‘http’: ‘http://localhost:8888’, ‘https’:‘http://localhost:8888’}

scrapy加代理:
meta={‘proxy’: “http://localhost:8888”}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python基于Scrapy-Redis分布式爬虫设计毕业源码(毕设项目).zip 该项目代码主要针对计算机、自动化等相关专业的学生从业者下载使用,项目代码都经过严格调试,确保可以运行!放心下载使用。 也可作为期末课程设计、课程大作业、毕业设计等。具有较高的学习借鉴价值!也可直接当做个人项目使用。 ## 开发环境:Python + Scrapy框架 + redis数据库 ## 程序开发工具: PyCharm 程序采用 python 开发Scrapy 框架来开发,使用 Xpath 技术对下载的网页进行提取解析,运用 Redis 数据库做分布式, 设计并实现了针对当当图书网的分布式爬虫程序,scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler - 调度器 dupefilter - URL去重规则(被调度器使用) pipeline - 数据持久化 Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时候,单个主机的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来。 而Scrapy-Redis则是一个基于Redis的Scrapy分布式组件。它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),并对爬取产生的项目(items)存储以供后续处理使用。scrapy-redi重写了scrapy一些比较关键的代码,将scrapy变成一个可以在多个主机上同时运行的分布式爬虫。
Scrapy-Playwright是一个用于Scrapy框架的插件,它允许您使用Playwright库来爬取JavaScript动态渲染的网站。下面是使用Scrapy-Playwright进行Web Scraping的简单教程: 1. 安装Scrapy-Playwright 您可以使用pip命令来安装Scrapy-Playwright。在命令提示符或终端中运行以下命令: ``` pip install scrapy-playwright ``` 2. 配置Scrapy-Playwright 要使用Scrapy-Playwright,您需要在Scrapy项目的settings.py文件中进行配置。添加以下行: ``` DOWNLOADER_MIDDLEWARES = { 'scrapy_playwright.PlaywrightMiddleware': 543, } PLAYWRIGHT_LAUNCH_OPTIONS = { 'headless': True, } ``` 这将启用Playwright中间件,并将Playwright设置为在无头模式下运行。 3. 创建Spider 创建一个新的Spider并导入PlaywrightRequest和PlaywrightResponse类。这些类类似于Scrapy的Request和Response类,但它们使用Playwright库来处理JavaScript渲染。 ``` from scrapy_playwright import PlaywrightRequest, PlaywrightResponse from scrapy.spiders import Spider class MySpider(Spider): name = 'myspider' start_urls = ['https://www.example.com'] def start_requests(self): for url in self.start_urls: yield PlaywrightRequest(url) def parse(self, response: PlaywrightResponse): # 处理响应 ``` 4. 处理响应 在parse方法中,您可以像处理Scrapy Response对象一样处理PlaywrightResponse对象。但是,PlaywrightResponse对象包含了一个page属性,它是由Playwright库返回的Page对象,您可以使用它来处理JavaScript渲染的内容。 ``` def parse(self, response: PlaywrightResponse): # 获取HTML和JavaScript渲染的内容 html = response.text js_rendered_html = response.page.content() ``` 5. 运行Spider 最后,您可以像运行任何其他Scrapy Spider一样运行您的Spider。 ``` scrapy crawl myspider ``` 希望这个简单的教程能够帮助您开始使用Scrapy-Playwright进行Web Scraping。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值