2015-09-24 13 views
7

Pracuję z lokalnym plikiem html w Pythonie, a ja próbuję użyć lxml do parsowania pliku. Z jakiegoś powodu nie mogę poprawnie załadować pliku i nie jestem pewien, czy ma to związek z brakiem serwera http skonfigurowanego na moim komputerze lokalnym, czy też z powodu użycia innej metody.Jak używać Pythona i lxml do parsowania lokalnego pliku html?

Moja odniesienia dla tego kodu było to: http://docs.python-guide.org/en/latest/scenarios/scrape/

Może to być związane z problemem: Requests : No connection adapters were found for, error in Python3

Oto mój kod:

from lxml import html 
import requests 

page = requests.get('C:\Users\...\sites\site_1.html') 
tree = html.fromstring(page.text) 

test = tree.xpath('//html/body/form/div[3]/div[3]/div[2]/div[2]/div/div[2]/div[2]/p[1]/strong/text()') 

print test 

traceback że jestem coraz brzmi:

C:\Python27\python.exe "C:/Users/.../extract_html/extract.py" 
Traceback (most recent call last): 
    File "C:/Users/.../extract_html/extract.py", line 4, in <module> 
    page = requests.get('C:\Users\...\sites\site_1.html') 
    File "C:\Python27\lib\site-packages\requests\api.py", line 69, in get 
    return request('get', url, params=params, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\api.py", line 50, in request 
    response = session.request(method=method, url=url, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 465, in request 
    resp = self.send(prep, **send_kwargs) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 567, in send 
    adapter = self.get_adapter(url=request.url) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 641, in get_adapter 
    raise InvalidSchema("No connection adapters were found for '%s'" % url) 
requests.exceptions.InvalidSchema: No connection adapters were found for 'C:\Users\...\sites\site_1.html' 

Process finished with exit code 1 

Widać, że to ma coś wspólnego z "adapterem połączenia", ale nie jestem pewien, co to oznacza.

+0

Dlaczego nie zaczniesz od minimalnego przykładu lokalnego pliku HTML? Ułatwia Ci naukę i możesz opublikować zawartość, ułatwiając wszystkim śledzenie. – Midnighter

+0

Niestety, plik jest ogromny i obawiam się, że jego uproszczenie może spowodować wyjście z programu. – rdevn00b

Odpowiedz

13

Jeśli plik jest lokalny, nie należy używać requests - wystarczy otworzyć plik i odczytać go w requests spodziewa się mówić do serwera WWW..

with open(r'C:\Users\...site_1.html', "r") as f: 
    page = f.read() 
tree = html.fromstring(page) 
+0

OK Próbuję tego, ale to mówi mi, że .text w page.text jest nierozwiązywalny. – rdevn00b

+0

Jeśli po prostu używam 'tree = html.fromstring (strona)' wydaje się działać ... – rdevn00b

+0

@ rdevn00b: my bad. Tak, po prostu użyj 'page', a nie' page.text'. Zaktualizuję moją odpowiedź. –

Powiązane problemy