首页 > 解决方案 > Python网络抓取,用于抓取多个链接的循环问题(使用html请求/beautifulsoup)

问题描述

我创建了一个 webscraper(对此是新的),它首先使用 html_requests 从产品网格中抓取绝对链接,然后使用 for 循环对这些链接进行迭代以收集所需的信息,并将其存储为变量。

for link in productlinks2:
        session = HTMLSession()
        r = session.get(link)
        r.html.render(sleep=3)
        name = r.html.find('#estore_product_title > h1', first=True).text.strip()
        try:
            price = r.html.find('#PDP_productPrice', first=True).text.strip()
        except:
            price = r.html.find('#PDP_productPrice', first=True) == None
        availabilityclass = r.html.find('#productPageAdd2Cart', first=True)
        if availabilityclass == None:
            availability = 0
        elif availabilityclass.text.find('Add') != -1:
            availability = 1
        store = 'boots'
        soup = BeautifulSoup(r.content, 'html.parser')
        brandname = soup.find("span", itemprop="Brand").text
        hyperlink = link
        images = r.html.find('img')
        imagelink = images[0]
        imagelinkstring = str(imagelink)
        imagelink1 = re.findall(r'(https?://\S+)', imagelinkstring)
        imagelink1str = str(imagelink1)
        imagelink2 = imagelink1str[:-4]
        imagelink3 = imagelink2[2:]
        finalimagelink = imagelink3.replace('wid=100&hei=100', 'wid=350&hei=350')

        product = {
            'name': name,
            'price': price,
            'availability': availability,
            'store': store,
            'brand': brandname,
            'hyperlink': hyperlink,
            'imagelink': finalimagelink
        }
        print(product) 

抓取的链接总数超过 10000 个,但在遍历它们时,代码停止运行(不再打印任何产品),或者在第 17 个链接处返回一个 pyppeteer.errors.BrowserError: Browser closed unexpectedly或错误。pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 8000 ms exceeded.我已经打印了链接,第 17 个链接是一个普通网页,每次运行代码时都会更改,所以我认为这不是问题。任何帮助,将不胜感激。

标签: pythonfor-loopweb-scrapingbeautifulsouppython-requests

解决方案


推荐阅读