[当尝试解析亚马逊产品时,我的请求有时会重定向到其他页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[当尝试解析亚马逊产品时,我的请求有时会重定向到其他页面相关的知识,希望对你有一定的参考价值。

我正在尝试解析亚马逊产品。我运行代码的一半时间运行良好,并返回信息,另一半将我的请求重定向到一个亚马逊页面,该页面似乎旨在抵御恶意请求。当我尝试返回页面的URL时,它将返回我的原始输入URL,而不是亚马逊页面之一。从我阅读过的使用标头的内容应该可以解决此问题,但是同样,它仅处理大约一半的请求,这确实很奇怪。无论如何,有没有办法确保我总是得到真实的回应?

下面是代码:

    import requests
    from bs4 import BeautifulSoup as soup

    #constants
    url = "https://www.amazon.com/Zephyrus-GeForce-i7-9750H-Windows-GX531GW- 
    AB76/dp/B07QN3683G/ref=sr_1_12?dchild=1&keywords=zephyrus+g15&qid=1586732721&sr=8-12"

    #Amazon data class
class items:

def __init__(self, url):
    self.url = url

#parses page and returns info
def data(self):
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}
    #get html response
    try:
        html = requests.get(self.url, headers=headers).content
    except Exception:
        print("Could not retrieve page")
    else:
        #parse the page
        pagesoup = soup(html, "html5lib")
        #get price, name
        try:
            price = pagesoup.find("span", id="priceblock_ourprice").get_text().strip()
        except Exception:
            print("Price could not be extracted")
            price = None
        try:
            name = pagesoup.find("span", id="productTitle").get_text().strip()
        except Exception:
            print("Product name could not be extracted")
            name = None
    return price, name

  #test
  item_1 = items(url)
  print(item_1.data())
答案

根据我的爬网经验,通常最好假设您不能保证与不受控制的一方(在本例中为Amazon服务器)的行为有关。

我反而建议---似乎已经是您要去的方向-设计代码,以便在发生所需行为时不会做出适当反应。例如,如果此特定故障案例的性质至少具有一致且可识别的形式,则可以让它等待指定的时间段然后重试(如果它工作了一半时间,则可能是计时问题)。抓取工具等有时会失败;只要他们期望失败,就可以了。

话虽如此,如果您想做更彻底的欺骗服务器的工作,则可以使用wireshark或tshark之​​类的东西来捕获常规Web浏览器发送的实际标头,以便可以匹配所有标头(相对于到用户代理)。

另一答案

您可以使用selenium,这是一个能够操纵浏览器的python模块。即使不是全部,它也可以大部分时间通过这些“机器人测试”,并且可以选择使用无头浏览器。

以上是关于[当尝试解析亚马逊产品时,我的请求有时会重定向到其他页面的主要内容,如果未能解决你的问题,请参考以下文章

如果尝试进入登录屏幕,Laravel 5 会重定向到主页

为啥从亚马逊弹性负载均衡器后面发送重定向时收到 502 错误网关?

当请求 url 包含“!”时,亚马逊产品广告 API 返回“SignatureDoesNotMatch”

更新 XAMPP 后,现有的 Wordpress 网站会重定向到安装页面?

条件满足后,私有路由不重定向

为啥有时我的 openmeetings 服务器实例从头开始运行 [关闭]