Python中Scrapy框架遇到404错误如何解决?

2019-01-05 14:04:50 [csrc][scrapy.core.engine] DEBUG: Crawled (404) <GET http://www.csrc.gov.cn/pub/zjhpublic/G00306202/201806/t20180622_340238.htm> (referer: http://www.csrc.gov.cn/pub/newsite/xxpl/yxpl/index_16.html)
2019-01-05 14:04:51 [csrc][scrapy.spidermiddlewares.httperror] INFO: Ignoring response <404 http://www.csrc.gov.cn/pub/zjhpublic/G00306202/201806/t20180622_340238.htm>: HTTP status code is not handled or not allowed

抓取 网址的时候 报 404,很多都没有问题,就是个别的出现 404 这是为啥?

网址:
http://www.csrc.gov.cn/pub/newsite/xxpl/yxpl/index.html
Python中Scrapy框架遇到404错误如何解决?


7 回复

别爬了,要被抓起来吃牢饭的


遇到404,首先得确定是Scrapy的问题还是目标网站的问题。先看下你的爬虫代码,是不是URL构造错了。

最直接的排查方法是手动访问那个URL,用浏览器或者curl命令试试。如果手动访问也是404,那说明链接本身就不存在,得检查你的URL生成逻辑或者起始链接。

如果手动访问正常,但Scrapy返回404,那可能是网站对Scrapy的请求头有检测。Scrapy默认的User-Agent比较明显,有些网站会屏蔽。可以尝试在settings.py里修改默认的User-Agent,或者启用中间件随机更换。

另外,检查一下是不是触发了网站的防爬机制,比如请求频率太高。可以在settings.py里适当调大DOWNLOAD_DELAY。

这里有个简单的代码示例,展示如何设置User-Agent和下载延迟:

# settings.py
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
DOWNLOAD_DELAY = 2  # 每次请求间隔2秒

# 或者在爬虫类里单独设置
class MySpider(scrapy.Spider):
    name = 'my_spider'
    custom_settings = {
        'USER_AGENT': '你的自定义UA',
        'DOWNLOAD_DELAY': 3,
    }
    # ... 其他代码

如果以上都不行,用Scrapy的日志看看详细的请求和响应信息,有时候网站返回的404页面里会有线索。

总结:先手动验证URL,再检查请求头和频率。

在线 debug …

论坛在线发贴 debug

测试了一下没有啊。。。
2019-01-05 15:13:20 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.csrc.gov.cn/pub/zjhpublic/G00306202/201806/t20180622_340238.htm> (referer: None)

真·在线 debug

你也是厉害,花钱请个人不比你问的强??

回到顶部