как портировать приложение python urllib2 (веб-скребок), которое использует Beautiful Soup 4 для использования пакета запросов вместо - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь обновить приложение web scraper, которое использует Beautiful Soup 4 в Python 3 в Anaconda, чтобы использовать пакет Requests вместо urllib, urllib2 и urllib3.

urllib и urllib2 не существуют в каналах Anaconda, и из того, что я прочитал, пакет запросов на чтение сделал urllib и urllib2 устаревшими. Я все еще довольно новичок в программировании на Python для веб-скребинга и еще не до конца понимаю все концепции и внутренние тонкости этих 4 пакетов.

Когда я заменяю "urllib2.urlopen ()" на "reports.get ()", я получаю следующую ошибку:

запросов на импорт из bs4 import BeautifulSoup

'''replace the following line with "page =  Request.get(url)" '''
#   page = urllib2.urlopen(url)
page = requests.get(url)
soup_page = BeautifulSoup(page,"lxml")

Я получаю следующее сообщение об ошибке без объяснения в модуле bs4: Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ bs4__init __. Py", строка 246, в init elif len (разметка) <= 256 и (</p>)

TypeError: объект типа 'Response' не имеет len ()

Это сообщение об ошибке помещает меня глубоко в недра init .py в bs4.

Я не могу найти объяснение того, как перенести код urllib или urllib2 на запросы с Beautiful Soup 4.

Может ли кто-нибудь предоставить подробное руководство о том, как портировать приложения urllib / urllib2 для использования запросов с красивым супом в Python 3?

Anaconda / conda не импортирует urllib или urllib2 в среды Python 3.

Спасибо.

Рич

1 Ответ

0 голосов
/ 09 сентября 2018

Ошибка возникает из-за неправильной передачи html-кода ответа в Beautifulsoup. Передайте response.text вместо объекта ответа:

# page = urllib2.urlopen(url)

page = requests.get(url)

soup_page = BeautifulSoup(page.text, "lxml")

Возможно, вам придется прочитать запрос документации

...