python - 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 个链接是一个普通网页,每次运行代码时都会更改,所以我认为这不是问题。任何帮助,将不胜感激。
解决方案
推荐阅读
- python - train_test_split 中的 X 参数是没有目标类的整个数据还是包含目标类?
- php - 如何从 SQL 获取数组值
- php - Curl 扩展在 Docker 中失败,出现错误“CURL_OPENSSL_3 not found”
- javascript - Rails 5 - 根据先前的 collection_select 更改 collection_select 的表单值
- react-native - 是否有可能在 react-native 的抽屉导航器中嵌套选项卡导航器?
- java - Spring AccessDeniedException 中的自定义消息
- java - 泛型方法是否可以从您传递给它的类型中调用方法
- r - 是否可以确定一行中的最大值是否唯一?
- css - 更改材质滑块拇指大小
- amazon-web-services - 无法从浏览器访问具有弹性 IP 地址的 AWS EC2 实例