【问题标题】:How to handle Read Timeout Error when scraping Edmunds.com website in Python?用 Python 抓取 Edmunds.com 网站时如何处理读取超时错误?
【发布时间】:2020-05-15 20:13:35
【问题描述】:

我正在尝试网络抓取的初学者,尝试从 https://www.edmunds.com/ 抓取客户评论以进行研究。

然而,即使是基本代码也只给出读取超时错误。

import requests 
from bs4 import BeautifulSoup 
result = requests.get("https://www.edmunds.com/")
print(result.status_code)

你能帮忙吗?

【问题讨论】:

  • 嗨 Juliana,请先熟悉writing questions,然后再询问下一个!享受您在 SO 的住宿:)

标签: python error-handling beautifulsoup nlp timeout


【解决方案1】:

使用requests_html 或在标题中添加User-Agent

from requests_html import HTMLSession
session = HTMLSession()
url = session.get('https://www.edmunds.com/')

try:
    status = url.status_code
    print(status)
except Exception as e:
    print(e)

import requests

headers = {
    "User-Agent": "Mozilla/5.0"
}
result = requests.get(url="https://www.edmunds.com", headers=headers)

try:
    status = result.status_code
    print(status)
except Exception as e:
    print(e)

在开始抓取之前,请参阅 https://www.edmunds.com/robots.txt

【讨论】:

    【解决方案2】:

    网站有一些基本的反scraping机制。特别是,它会检查您的“获取”请求是否实际上类似于来自浏览器的请求并具有标头。如果您想...到达某个地方,请参阅下文如何在您的请求中传递标准标头。

    现在,我不会使用该网站来学习 scraping - 大部分看起来都是基于 javascript 构建的(尚未彻底检查 + 您需要根据您的目标页面评估这一点)。如果你想抓取这个网站,你要么需要找到底层的 API 调用,要么需要更高级的工具,比如依赖于浏览器的 selenium...

    import requests 
    from bs4 import BeautifulSoup 
    
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4040.128"
    }
    
    result = requests.get("https://www.edmunds.com/", headers=header, timeout=15)
    print(result.status_code)
    

    【讨论】:

    • 感谢您的回答。我用 header 和 request_html 尝试过,但正如你所说,由于防刮机制,它不起作用。如何使用硒解决它?他们有一个可用的 API,于 2017 年关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多