【问题标题】:ConnectionResetError on a web-scrape run.网络抓取运行时的 ConnectionResetError。
【发布时间】:2014-01-13 06:36:39
【问题描述】:

我是 python 新手。下面的函数给出了来自 imdb 的电影和导演名称。它适用于单个链接。但是当我为大量链接运行它时,它会给出 ConnectionResetError: [WinError 10054] 现有连接被远程主机强行关闭

我该怎么办?如何改进代码?

def get_director(movie_url):
    html=urllib.request.urlopen(movie_url).read()
    soup=BeautifulSoup(html,"lxml")
    movie=soup.find("h1","header")
    movie_name=movie.find("span","itemprop").text
    d=soup.find("div","txt-block")
    director=d.find("span","itemprop").text
    return {'Movie':movie_name,'Director':director}

【问题讨论】:

  • 我不知道它是否会起作用,但您可以尝试在调用get_director 方法之间使用time.sleep 方法。您可能访问服务器的速度太快了。将呼叫延迟一秒钟也有助于解决问题。
  • 我按照你的说明试过了。仍然得到同样的错误。
  • 我仍然认为这是某种速率限制问题。您应该按照Andrew Gorcester 所说的那样做,并尝试使用用户代理和请求之间的延迟。
  • try ...except 块会起作用吗?如果是,我应该把它放在哪里?

标签: python python-3.x beautifulsoup urllib


【解决方案1】:

这听起来很可能是服务器端的速率限制或其他限制,而不是代码本身的缺陷。您应该首先查看 imdb 是否发布了官方汇率或其他关于抓取的限制;如果没有,您别无选择,只能尝试并退出,直到错误停止。

【讨论】:

  • 你是对的!经过一些试验和错误后,它起作用了。无论如何,我的程序花了大约 20 分钟从 250 个链接中检索数据。如何优化代码?
  • 如果这是由于速率限制,那么您无法优化您的代码,除非通过了解速率限制并严格遵守该限制,或者通过另一种方法来获取您想要的数据。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
  • 2022-08-18
  • 1970-01-01
相关资源
最近更新 更多