Scrapy returns爬网(406)错误/问题刮削每周通告

2024-09-29 23:32:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想浏览Rite Aid的每周通告,通过网络选项卡,我发现json链接中充满了我需要的内容(品牌名称、价格、折扣)。从过去的json项目中,我在scrapy上创建了这个

class RiteAidSpider(scrapy.Spider):
    name = 'riteaid'
    start_urls = ['https://weeklyad.info.riteaid.com/flyer_data/3444750?locale=en-US']

def parse(self, response):
    data = json.loads(response.body)
    for items in data:
        item_name = items['display_name']
        sales_price = items['current_price']
        pre_price = items['pre_price_text']
        yield {
            'store': 'rite aid',
            'name': item_name,
            'discount': pre_price,
            'sales_price': sales_price,
        }

但当我运行该程序时,我得到了“Scrapy Crawled(406)HTTP状态代码未处理或不允许”

我觉得奇怪的一件事是,当我在浏览器中输入start_url时,json没有出现。从过去的抓取项目中,每当我在浏览器中放置json链接时,我仍然可以看到json数据,但这一点我看不到。我不明白为什么它不会出现

有没有人能给我指出正确的方向,告诉我我做错了什么,或者我需要学习什么才能让这一切顺利进行


Tags: 项目namejsondata链接response浏览器items
1条回答
网友
1楼 · 发布于 2024-09-29 23:32:44

(HTTP)406 Not Acceptable(reference)客户端错误响应代码表示服务器无法生成与请求的主动内容协商头中定义的可接受值列表匹配的响应,并且服务器不愿意提供默认表示

在我看来,您试图与之通信的服务器有一些validations / verifications不向网络爬虫返回数据

如果它以前起作用而现在不起作用,也许它只是现在才起作用的一种保护。 如果您想尝试避免这个问题,也许您可以从脚本中更改一些“默认”设置

您可以更改当前项目中的settings.py文件,在此处查找该信息,并根据计算机中安装的当前web浏览器进行更改

访问开发者工具(F12network tab,在站点中进行导航,从该域中的某个请求复制信息

settings.py

USER_AGENT = '' #copy user-agent from browser

# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
  'Accept': '', #copy this info from browser
  'Accept-Language': '', #copy this info from browser
}

下面是一篇good tutorial(2017)文章,详细解释了如何处理导航错误,虽然很老,但你可以理解主要思想。本教程也链接到scrapy网站的resources部分

希望能有帮助

相关问题 更多 >

    热门问题