当前位置: 首页 > news >正文

网站开发应用技术专业十堰优化seo

网站开发应用技术专业,十堰优化seo,免费logo设计软件手机版,我做动作你来猜的网站之前做分布式爬虫的时候,都是从push url来拿到爬虫消费的链接,这里提出一个问题,假如这个请求是post请求的呢,我观察了scrapy-redis的源码,其中spider.py的代码是这样写的 1.scrapy-redis源码分析 def make_request_from_data(self, data):"""Returns a Reques…

之前做分布式爬虫的时候,都是从push url来拿到爬虫消费的链接,这里提出一个问题,假如这个请求是post请求的呢,我观察了scrapy-redis的源码,其中spider.py的代码是这样写的

1.scrapy-redis源码分析

    def make_request_from_data(self, data):"""Returns a `Request` instance for data coming from Redis.Overriding this function to support the `json` requested `data` that contains`url` ,`meta` and other optional parameters. `meta` is a nested json which contains sub-data.Along with:After accessing the data, sending the FormRequest with `url`, `meta` and addition `formdata`, `method`For example:.. code:: json{"url": "https://example.com","meta": {"job-id":"123xsd","start-date":"dd/mm/yy",},"url_cookie_key":"fertxsas","method":"POST",}If `url` is empty, return `[]`. So you should verify the `url` in the data.If `method` is empty, the request object will set method to 'GET', optional.If `meta` is empty, the request object will set `meta` to an empty dictionary, optional.This json supported data can be accessed from 'scrapy.spider' through response.'request.url', 'request.meta', 'request.cookies', 'request.method'Parameters----------data : bytesMessage from redis."""formatted_data = bytes_to_str(data, self.redis_encoding)if is_dict(formatted_data):parameter = json.loads(formatted_data)else:self.logger.warning(f"{TextColor.WARNING}WARNING: String request is deprecated, please use JSON data format. "f"Detail information, please check https://github.com/rmax/scrapy-redis#features{TextColor.ENDC}")return FormRequest(formatted_data, dont_filter=True)if parameter.get("url", None) is None:self.logger.warning(f"{TextColor.WARNING}The data from Redis has no url key in push data{TextColor.ENDC}")return []url = parameter.pop("url")method = parameter.pop("method").upper() if "method" in parameter else "GET"metadata = parameter.pop("meta") if "meta" in parameter else {}return FormRequest(url, dont_filter=True, method=method, formdata=parameter, meta=metadata)

源码地址:https://github.com/rmax/scrapy-redis
可以看到这里是可以处理post请求的

2.scrapy-rabbitmq-schrduler源码分析

地址:

https://github.com/aox-lei/scrapy-rabbitmq-scheduler

class RabbitSpider(scrapy.Spider):def _make_request(self, mframe, hframe, body):try:request = request_from_dict(pickle.loads(body), self)except Exception as e:body = body.decode()request = scrapy.Request(body, callback=self.parse, dont_filter=True)return request

可以看到RabbitSpider继承了spider的嘞,改写了request,当我们发我post请求的时候 request_from_dict(pickle.loads(body), self)会报错

builtins.UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

pick.loads 在尝试反序列化字节数据时遇到无法解码的字节序列造成的。具体来说,UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte 说明传入的数据包含非 UTF-8 编码的字节,可能是二进制数据或其他编码格式的数据。

def _make_request(self, mframe, hframe, body):try:# 反序列化 body 数据data = pickle.loads(body)# 获取请求的 URL 和其他参数url = data.get('url')method = data.get('method', 'GET').upper()  # 默认 GET,如果是 POST 需要设置为 'POST'headers = data.get('headers', {})cookies = data.get('cookies', {})body_data = data.get('body')  # 可能是 POST 请求的表单数据callback_str = data.get('callback')  # 回调函数名称(字符串)errback_str = data.get('errback')  # 错误回调函数名称(字符串)meta = data.get('meta', {})# 尝试从全局字典中获取回调函数# 使用爬虫实例的 `getattr` 方法获取回调函数callback = getattr(self, callback_str, None) if callback_str else Noneerrback = getattr(self, errback_str, None) if errback_str else None# # 确保回调函数存在# if callback is None:#     self.logger.error(f"Callback function '{callback_str}' not found.")# if errback is None:#     self.logger.error(f"Errback function '{errback_str}' not found.")# 判断请求方法,如果是 POST,则使用 FormRequestif callback:if method == 'POST':# FormRequest 适用于带有表单数据的 POST 请求request = scrapy.FormRequest(url=url,method='POST',headers=headers,cookies=cookies,body=body_data,  # 请求的主体callback=callback,errback=errback,meta=meta,dont_filter=True)else:# 默认处理 GET 请求request = scrapy.Request(url=url,headers=headers,cookies=cookies,callback=callback,errback=errback,meta=meta,dont_filter=True)else: passexcept Exception as e:body = body.decode()request = scrapy.Request(body, callback=self.parse, dont_filter=True)return request

直接获取callback是个字符串而不是函数,要在spider中获取到对应的函数

注:由于scrapy-rabbitmq-scheduler无人更新维护,目前新的scrapy已经不支持,上述最新的代码已推github:https://github.com/tieyongjie/scrapy-rabbitmq-task

安装直接安装

pip install scrapy-rabbitmq-task


 

http://www.yayakq.cn/news/52066/

相关文章:

  • 口碑好的唐山网站建设wordpress crossapple
  • 上海南山做网站个人门户网站模板下载
  • 饮料公司网站模板做网站展示软件
  • 内江网站建设新闻如何建立公司网站多少钱
  • 网站开发总体功能设计网络架构的基本特征是什么
  • 免费做网站的平台住房和城乡建设部科技网站首页
  • 深圳制作外贸网站上海十大管理咨询公司
  • 高校网站建设费用怎么优化网站性能
  • 嵌入式网站开发学习有没有做推文的网站
  • 宁波网站推广软件哪家强骨干专业建设网站
  • 网站开发的职责与分工在百度上做网站推广效果怎么样
  • 属于c2c的网站是网站推广的渠道有哪些
  • 有经验的聊城网站建设郑州网站建设三猫网络
  • 深圳惠州网站建设公司关键词搜索量全网查询
  • 房产证查询系统官方网站网页设计基础介绍
  • 河北平台网站建设做ui的网站
  • 柳州网站seo新手做自己的网站
  • 查看网站的 cms固始县住房和城乡建设局网站
  • 石家庄做的好的网站网页设计教程安利 杨松
  • 打开网站notfound服务器不稳定 如何让百度重新收录网站
  • 商业招商网站金融网站框架模板
  • 导购网站的seo怎么做logo在线生成器免费
  • 企业网站建设一般要素包括网站建设与管理专业课程
  • 徐州个人建站模板婚纱定制网站哪个好
  • 网站开发培训班企业如何打造品牌
  • 网站内容管理系统 下载wordpress更改内容
  • 国内网站建设阿里云wordpress做人事网站
  • 廊坊营销型网站建设交通建设工程质量监督局网站
  • 百度网站链接提交页面长沙房产网官网
  • 中国优秀企业网站欣赏谷歌网站提交