2015-08-09 4 views
2

Я бы хотел использовать Python 3 для создания веб-скребкового приложения. Веб-сайт, который я пытаюсь очистить, содержит недопустимый xhtml - в нем есть теги с двойными именами атрибутов.Webscraping с Python3 - Игнорирование повторяющихся ошибок атрибута

Я хотел бы использовать xml.dom.minidom для синтаксического анализа выбранных страниц. Из-за повторяющихся имен атрибутов, содержимое не разобрать, и я представил со следующей ошибкой:

Traceback (most recent call last): 
    File "scraper.py", line 45, in <module> 
    scraper.list() 
    File "scraper.py", line 34, in list 
    dom = parseString(response.text) 
    File "C:\Python34\lib\xml\dom\minidom.py", line 1970, in parseString 
    return expatbuilder.parseString(string) 
    File "C:\Python34\lib\xml\dom\expatbuilder.py", line 925, in parseString 
    return builder.parseString(string) 
    File "C:\Python34\lib\xml\dom\expatbuilder.py", line 223, in parseString 
    parser.Parse(string, True) 
xml.parsers.expat.ExpatError: duplicate attribute: line 2, column 43 

Я хочу, чтобы игнорировать эту ошибку и разобрать документ в любом случае. Я не могу контролировать данные icoming html. Что я могу сделать?

Вот мой код:

import requests 
from xml.dom.minidom import parse, parseString 


class Scraper: 

    def __init__(self): 

     pass 

    def list(self,pages=1): 

     response = requests.get('http://example.com') 

     dom = parseString(response.text) 

     print(dom.toxml) 


if __name__ == "__main__": 

    scraper = Scraper() 

    scraper.list() 

ответ

1

Существует лучший способ: переход к BeautifulSoup HTML parser. Хорошо разбираться в некорректном или сломанном HTML и, в зависимости от underlying parser library, может быть less or more lenient:

from bs4 import BeautifulSoup 
import requests 

response = requests.get(url).content 
soup = BeautifulSoup(response, "html.parser") # or use "html5lib", or "lxml" 
Смежные вопросы