【问题标题】:Error when attempting to crawl site with python尝试使用 python 抓取网站时出错
【发布时间】:2019-03-21 07:44:04
【问题描述】:

我正在尝试从this website 获取一些显示器的价格。这是我的代码:

    def noteBooksBillgerParser(url):
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'}
        page = requests.get(url, headers=headers)
        while True:
            print ("test")
            sleep(3)
            try:
                doc = html.fromstring(page.content)

                XPATH_PRICE = '//div[@id="product_detail_price"]//content()'
                RAW_PRICE = doc.xpath(XPATH_PRICE)
                PRICE = ' '.join(''.join(RAW_PRICE).split()).strip() if RAW_PRICE else None

                data = {
                    'PRICE': PRICE,
                    'URL': url,
                }

                return data
            except Exception as e:
                print
                e


    def ReadIDs():
        # AsinList = csv.DictReader(open(os.path.join(os.path.dirname(__file__),"Asinfeed.csv")))
        IDList = ['vp248qg',
                  'vz239he',
                  'vs247hr+164581'
                  ]
        extracted_data = []
        for i in IDList:
            url = "https://www.notebooksbilliger.de/asus+" + i
            print("Processing: ", url)
            extracted_data.append(noteBooksBillgerParser(url))
            sleep(2)
        f = open('notebooksbilliger.json', 'w')
        json.dump(extracted_data, f, inde

nt=4)

我很确定大部分代码都在工作,但我不确定如何将 Price 放入我的 XPATH_PRICE 变量中。我认为可能有错误。

【问题讨论】:

    标签: python xpath web-crawler


    【解决方案1】:

    这并不是将“价格放入我的 XPATH_PRICE 变量”,而是将其放入您的 ROW_PRICE 变量中。如果你:

    RAW_PRICE = doc.xpath('//div[@id="product_detail_price"]')[0].values()[4]
    

    您的输出将是(随机选择IDList = vz239he):

    156.99
    

    然后应按预期处理其余部分。

    【讨论】:

    • 谢谢,我猜这应该可行。但现在我有: requests.exceptions.SSLError: HTTPSConnectionPool(host='www.notebooksbilliger.de', port=443): Max retries exceeded with url: /asus+vp248qg (Caused by SSLError(SSLCertVerificationError(1, '[SSL : CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书链中的自签名证书 (_ssl.c:1045)')
    • 当然。这是您的简化版本(仅适用于一个产品 ID):url = "https://www.notebooksbilliger.de/asus+vz239he" headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'} page = requests.get(url, headers=headers) doc = lxml.html.fromstring(page.content) XPATH_PRICE = '//div[@id="product_detail_price"]//content()' RAW_PRICE = doc.xpath('//div[@id="product_detail_price"]')[0].values()[4]
    • 对不起,一个错字:XPATH_PRICE = '//div[@id="product_detail_price"]//content()' 行需要从我之前的评论中删除(不能再编辑那个了...)
    • 我这边没有错误;但请记住,我只是尝试了一种产品,所以我没有“最大重试次数”。
    • 好吧,我还是用你的版本得到了这个,但它仍然对我有帮助。你现在已经完成了这个问题:P
    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2021-10-28
    • 2018-06-22
    • 1970-01-01
    相关资源
    最近更新 更多