[Извините, если мой вопрос немного наивный.Я новичок в python и запросах.] Я пробовал много способов, но все еще не мог найти способ передать lxml.etree.ParserError в html.fromstring.
Мой код выглядит следующим образом:
from lxml import html
import requests
import time
import csv
import pandas as pd
start = time.time()
data = {}
data['webid'] = []
data['name'] = []
filename = "xxx"+ str(N) + ".csv"
for i in range(N):
url = "http://xxx."+str(i)+".html"
print(url)
try:
page = requests.get(url,timeout=120)
try:
tree = html.fromstring(page.content)
name = tree.xpath('//h2[starts-with(text(),"Name")]/text()')
data['webid'].append(i)
data['name'].append(name)
except (html.ParseError, ParseError):
continue
except requests.exceptions.RequestException as e:
continue
dataframe = pd.DataFrame(data)
dataframe.to_csv(filename, index=False, sep='|')
print("took", time.time() - start, "seconds.")
Ошибка выглядит следующим образом:
Traceback (most recent call last):
File "xxx/xxx.py", line 43, in <module>
tree = html.fromstring(page.content)
File "\AppData\Local\Programs\Python\Python37-32\lib\site-packages\lxml\html\__init__.py", line 876, in fromstring
doc = document_fromstring(html, parser=parser, base_url=base_url, **kw)
File "\AppData\Local\Programs\Python\Python37-32\lib\site-packages\lxml\html\__init__.py", line 765, in document_fromstring "Document is empty")
lxml.etree.ParserError: Document is empty
Я пробовал несколько исключений, например, кроме (lxml.etree.ParserError, etree.ParserError, tree.ParserError, html.ParserError), но ни один из них не работает, и выдает новую ошибку:
Traceback (most recent call last):
File "D:/Google/Research2017/t/schoolpc/v241.py", line 66, in <module>
except (lxml.etree.ParserError, ParseError):
NameError: name 'lxml' is not defined
Могу ли я спросить, есть ли способы передать ParserError и продолжить циклне поднимая ошибку?Большое спасибо!
Большое спасибо @BoboDarph, решение состоит в следующем:
from lxml.etree import ParseError
from lxml.etree import ParserError
...except (ParserError, ParseError)
"Ошибка NameE вызвана тем, как и что вы импортируете. В вашем операторе импорта,вы импортируете конкретный модуль lxml (html), поэтому вы не можете вызвать lxml.etree.ParserError или ParseError, поскольку они не импортированы. Импортировать конкретное исключение в другой оператор импорта (что-то вроде lxml.etree import ParseError) - BoboDarph "