无法使用Python请求和lxml获取Dell保修信息。但浏览器可以

时间:2018-02-12 18:56:24

标签: python web-scraping python-requests

import requests
from lxml import html

with requests.Session() as c:
    url = 'http://www.dell.com/support/home/us/en/04/product-support/servicetag/18lm9h2/warranty'
    payload = {'ref': 'captchasuccess'}
    headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}
    page = c.get(url, params=payload, headers=headers)
    tree = html.fromstring(page.content)
    title = tree.xpath('//*[@id="pd-support-banner"]/div/div/div/div/h1/span/text()')
    warranty = tree.xpath('//*[@id="printdivid"]/div/div[2]/table[2]/tbody/tr/td[2]/text()')
    print(title)
    print(warranty)

亲爱的Python社区,

我正在尝试使用python获取我的dell项目的保修信息。当我在浏览器上粘贴以下网址:“http://www.dell.com/support/home/us/en/04/product-support/servicetag/18lm9h2/warranty?ref=captchasuccess”时,我可以毫无问题地获得保修信息。但是,当我使用上面的代码获得保修信息时,它会给我一个空列表。我知道上面的代码是正确的,因为它成功地给了我项目的标题。但它没有给我保修信息。你们有什么建议吗?我认为自己是Python的新手,非常感谢他解释为什么它不起作用。

问候!

1 个答案:

答案 0 :(得分:1)

更改此行:

tree = html.fromstring(page.content)

到此:

print(page.content)

并查看html。

保修信息被锁定在CAPTCHA验证检查后面。

要获得保修信息,您必须编写一个可以检测/解决/提交CAPTCHA的程序。