【问题标题】:Why does my script timeout? - BeautifulSoup Timeout Error为什么我的脚本超时? - BeautifulSoup 超时错误
【发布时间】:2020-10-05 06:40:25
【问题描述】:

我正在尝试抓取大量数据并循环浏览许多页面。当我在循环中超过 5 页左右时,我不断收到超时错误。

### Libraries ###

import pyppdf.patch_pyppeteer
from bs4 import BeautifulSoup, SoupStrainer
import requests
from requests_html import HTMLSession
import pandas as pd
from time import sleep
import urllib.request

### SCRAPING PAGES 1-15

all_beer_info = []
for i in range(1,16):
    url = 'https://specsonline.com/product-category/beer/page/{}/'.format(i)
    print(url)
    session = HTMLSession()  
    resp = session.get(url, timeout=None)
    site = resp.html.render() #RENDERS INCASE ITS JAVASCRIPT SITE
    soup = BeautifulSoup(resp.html.html, features='lxml')
    beer_info = soup.select('.woocommerce-loop-product__title')
    for b in beer_info:
        results = (b.text)
        all_beer_info.append(results)
    sleep(randint(2,5))

有时这将运行整个脚本而不会出错,有时它会返回以下内容: pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 8000 ms exceeded.

我有四个不同的循环,如上面的循环:名称、价格、产品尺寸等。

如果它通过一两个循环,它将在代码完成之前超时,从而使这段时间变得毫无用处。是否有更有效的方法来运行此代码并组合数据?任何信息将不胜感激。

【问题讨论】:

    标签: python loops web-scraping beautifulsoup timeout


    【解决方案1】:

    问题是,对于所有 js 内容的“完全渲染”,某些页面需要超过 8 秒,而您会收到 TimeoutError。 resp.html.render() 的默认超时时间为 8 秒。 试试resp.html.render(timeout=20)

    【讨论】:

    • 太好了,成功了!我没有意识到我可以通过渲染传递超时参数。
    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 2021-08-23
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多