我正在从Yelp上抓取餐厅 comments ,我正在访问餐厅的API来这样做.我目前正在收集4个星级 comments ,例如这restaurant page个有对应的API个.

这是当爬虫程序当前位于餐厅页面上时向API发送http请求的代码块

bizId = response.xpath("//meta[@name='yelp-biz-id']/@content").extract_first()
api_url = 'https://www.yelp.it/biz/' + bizId + '/review_feed?rr=' + str(n_star_filter)
yield response.follow(url=api_url, callback = self.parse_yelp_restaurant_api)

有时API被正确访问,我能够刮取它们.但是,大多数时候,我会得到这样的错误:

2023-10-27 15:57:39 [scrapy.core.scraper] ERROR: Error downloading <GET https://www.yelp.it/biz/78t73jTxdUw5C-v44lj4Iw/review_feed?rr=4>
Traceback (most recent call last):
  File "/Users/mauri/anaconda3/lib/python3.11/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
    result = context.run(gen.send, result)
  File "/Users/mauri/anaconda3/lib/python3.11/site-packages/scrapy/core/downloader/middleware.py", line 64, in process_response
    method(request=request, response=response, spider=spider)
  File "/Users/mauri/anaconda3/lib/python3.11/site-packages/scrapy/downloadermiddlewares/httpcompression.py", line 63, in process_response
    decoded_body = self._decode(response.body, encoding.lower())
  File "/Users/mauri/anaconda3/lib/python3.11/site-packages/scrapy/downloadermiddlewares/httpcompression.py", line 102, in _decode
    body = brotli.decompress(body)
  File "/Users/mauri/anaconda3/lib/python3.11/site-packages/brotli/brotli.py", line 90, in decompress
    d.finish()
  File "/Users/mauri/anaconda3/lib/python3.11/site-packages/brotli/brotli.py", line 464, in finish
    raise Error("Decompression error: incomplete compressed stream.")
brotli.brotli.Error: Decompression error: incomplete compressed stream.

我不明白这是什么意思,这真的很奇怪,一些API被下载,而另一些API在它们看起来没有什么不同的时候产生这个错误.

推荐答案

这很可能违反了Yelp的政策,这样的网站不喜欢人们在这种迷信中窃取数据.例如,this policy says

使用任何机器人、蜘蛛、服务搜索/检索应用程序或其他自动化设备、过程或手段来访问、检索、复制、擦除或索引服务的任何部分或任何服务内容,除非Yelp明确允许(例如,如在www.yelp.com/robots.txt所述);

根据代码和行为,服务器很可能检测到自动抓取并在中途切断响应.这不是压缩问题.你可能想看看Yelp API Access Via https://www.yelp.com/developers.

Python相关问答推荐

如何循环循环的每个元素并过滤掉Python rame中的条件

单击cookie按钮,但结果不一致

使用decorator 自动继承父类

尽管进程输出错误消息,subProcess.check_call的CalledProcess错误.stderr为无

GEKKO:已知延迟的延迟系统的参数估计

阅读Polars Python中管道的函数定义

在上下文管理器中更改异常类型

Python -Polars库中的滚动索引?

在Python中为变量的缺失值创建虚拟值

如何处理嵌套的SON?

Python 3.12中的通用[T]类方法隐式类型检索

Polars比较了两个预设-有没有方法在第一次不匹配时立即失败

如何使用pandasDataFrames和scipy高度优化相关性计算

在Python中处理大量CSV文件中的数据

从收件箱中的列中删除html格式

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

Pre—Commit MyPy无法禁用非错误消息

启动带有参数的Python NTFS会导致文件路径混乱

手动设置seborn/matplotlib散点图连续变量图例中显示的值

如何获取Python synsets列表的第一个内容?