Как указано в @tripleee, вам следует отредактировать вопрос, чтобы предоставить нам как минимум описание ошибок, которые блокируют ваш код.
Однако, как правило, вам следует избегать попробуйте / исключите все без дальнейшего указания типа обрабатываемой ошибки. В частности, в данный момент вы захватываете
req = requests.get(url)
soup = BeautifulSoup(req.text, "lxml")
, что, скорее всего, завершится ошибкой, если i) url
недействителен, или ii) lxml
не сможет проанализировать текстовую страницу. В обоих случаях лучше спроектировать код, чтобы этого не произошло (т. Е. Заранее очистить список urls
от недопустимых URL-адресов) без использования try / except. Если это окажется невозможным, вы должны хотя бы указать обработанные ошибки (например, except ConnectionError:
).
Наконец, я настоятельно рекомендую вам использовать пакет csv
для записи файлов csv в python и закрывать файлы каждый раз, когда вы перестаете писать в них. Ниже я пытаюсь предоставить MWE на основе предоставленных вами элементов:
import csv
import requests
with open('output.csv', 'a') as out: # here I open the file only once
outwriter = csv.writer(out)
for url in urls:
try:
req = requests.get(url)
soup = BeautifulSoup(req.text, "lxml")
for sub_heading in soup.find_all('h2'): # these are all h2s, if any
row = ['h2', url, sub_heading.text]
outwriter.writerow(row)
for sub_heading in soup.find_all('h3'): # these are all h3s, if any
row = ['h3', url, sub_heading.text]
outwriter.writerow(row)
except requests.exceptions.InvalidURL: # I am only capturing invalid url error: in case you happen to have more, be sure to capture them one by one
print('Invalid Url: ' + url)
out.close() # close the output file