我在 Python Web Scraping 中遇到了某个问题。背景是我想在http://www.bbc.co.uk/food/recipes/上刮掉所有的食物食谱!现在,下面是我的代码
def extract_all_information():
file_name='links_all_recipes.txt'
links=read_all_links(file_name)
count=1
counter=0
for link in links:
Recipes=open('All_Recipes.txt','a',encoding='utf-8')
url='http://'+link
single_recipe=recipe.collect_all_information(url)
Recipes.write(str(single_recipe))
Recipes.write('\n')
counter+=1
if counter>20:
counter=0
time.sleep(2)
count+=1
Recipes.close()
提取单个食谱信息(如作者)的代码是这样的:
from bs4 import BeautifulSoup
import requests
def extract_author(recipe_url):
recipe=requests.get(recipe_url)
rsoup = BeautifulSoup(recipe.text, "lxml")
result = ''
for tag in rsoup.find_all(itemprop='author'):
result = tag.contents[0]
return result
您可以假设所有其他函数(如 Extract_cooking_time() 和 extract_preparation_time () 等与上述函数类似)最终,我在 collect_all_information 中调用所有这些函数(提取与食谱相关的特定信息)( ) 提取与单个配方相关的所有内容,我在每个 Url 的循环中调用此函数 collect_all_information !每次,我都会提取与特定食谱相关的所有信息,并将这些信息附加到一个名为 Recipes.txt 的文件中
现在,我遇到的问题是,下面的错误
ConnectionError: ('Connection aborted.', ConnectionAbortedError(10053, '已建立的连接被主机中的软件中止', None, 10053, None))
这个错误是在我下载了大约 1000 个菜谱之后出现的(总共有 11,000 个菜谱,我想抓取/下载所有这些菜谱,我有所有菜谱的链接,在每个菜谱上,我提取了一些信息,比如烹饪时间,准备时间,作者,成分等),我已经寻找过类似的答案,但每个答案都说这个错误可能是由于不同的原因造成的。这是我的直觉,我认为这个错误在某种程度上与单位时间内抓取的最大数据数有关(意味着超出限制),我想我应该解决这个问题(我已经尝试过在抓取后 2 秒的时间睡眠来做到这一点每个 20 个食谱,但仍然收到此错误)!
只是更多信息,我正在使用 BeautifulSoup 4 和 Python 3,Windows 10 !有人可以告诉我我遇到此错误的原因,以及我应该在我的代码中修改什么来解决它。您的解决方案可以是任何东西,只要它易于理解和实施,另请注意,我尝试使用包“重试”,但我无法弄清楚我应该如何使用它,以及我应该在哪里使用它代码 !因此,您也可以将其包含在您的答案中!
为了清楚起见,我正在维护变量“count”来告诉我问题发生在哪里,我在将配方附加到文本文件之前打印它,(在这个问题发生多少次迭代之后)!而且我在文件中追加了这样即使出现这样的问题,至少我已经下载了一些食谱并将它们保存在我的硬件中 -</p>
非常感谢您提前抽出时间