Несколько запросов, приводящих к сбою программы (с помощью BeautifulSoup)

#python #beautifulsoup #python-requests #crash

Вопрос:

Я пишу программу на python, чтобы пользователь вводил несколько веб-сайтов, затем запрашивал и очищал эти веб-сайты для их названий и выводил их. Однако, когда программа превышает 8 веб-сайтов, программа каждый раз выходит из строя. Я не уверен, что это проблема с памятью, но я искал повсюду и не могу найти никого, у кого была такая же проблема. Код приведен ниже (я добавил 9 списков, поэтому все, что вам нужно сделать, это скопировать и вставить код, чтобы увидеть проблему).

 import requests
from bs4 import BeautifulSoup
lst = ['https://covid19tracker.ca/provincevac.html?p=ON', 'https://www.ontario.ca/page/reopening-ontario#foot-1', 'https://blog.twitter.com/en_us/topics/company/2020/keeping-our-employees-and-partners-safe-during-coronavirus.html', 'https://www.aboutamazon.com/news/company-news/amazons-covid-19-blog-updates-on-how-were-responding-to-the-crisis#covid-latest', 'https://www.bcg.com/en-us/publications/2021/advantages-of-remote-work-flexibility', 'https://news.prudential.com/increasingly-workers-expect-pandemic-workplace-adaptations-to-stick.htm', 'https://www.mckinsey.com/featured-insights/future-of-work/whats-next-for-remote-work-an-analysis-of-2000-tasks-800-jobs-and-nine-countries', 'https://www.gsb.stanford.edu/faculty-research/publications/does-working-home-work-evidence-chinese-experiment', 'https://www.livecareer.com/resources/careers/planning/is-remote-work-here-to-stay']
for websites in range(len(lst)):
    url=lst[websites]
    cite = requests.get(url,timeout=10).content
    soup = BeautifulSoup(cite,'html.parser')
    title = soup.find('title').get_text().strip()
    print(title)
print("Didn't crash")
 

У второго сайта нет названия, но не беспокойтесь об этом

Ответ №1:

Чтобы избежать сбоя страницы, добавьте user-agent заголовок в headers= параметр , в requests.get() противном случае страница подумает, что вы бот, и заблокирует вас.

 cite = requests.get(url, headers=headers, timeout=10).content
 

В вашем случае:

 import requests
from bs4 import BeautifulSoup


headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36"
}

lst = [
    "https://covid19tracker.ca/provincevac.html?p=ON",
    "https://www.ontario.ca/page/reopening-ontario#foot-1",
    "https://blog.twitter.com/en_us/topics/company/2020/keeping-our-employees-and-partners-safe-during-coronavirus.html",
    "https://www.aboutamazon.com/news/company-news/amazons-covid-19-blog-updates-on-how-were-responding-to-the-crisis#covid-latest",
    "https://www.bcg.com/en-us/publications/2021/advantages-of-remote-work-flexibility",
    "https://news.prudential.com/increasingly-workers-expect-pandemic-workplace-adaptations-to-stick.htm",
    "https://www.mckinsey.com/featured-insights/future-of-work/whats-next-for-remote-work-an-analysis-of-2000-tasks-800-jobs-and-nine-countries",
    "https://www.gsb.stanford.edu/faculty-research/publications/does-working-home-work-evidence-chinese-experiment",
    "https://www.livecareer.com/resources/careers/planning/is-remote-work-here-to-stay",
]
for websites in range(len(lst)):
    url = lst[websites]
    cite = requests.get(url, headers=headers, timeout=10).content
    soup = BeautifulSoup(cite, "html.parser")
    title = soup.find("title").get_text().strip()
    print(title)
print("Didn't crash")