Python BeautifulSoup html.parser не работает - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть скрипт для получения информации о книгах из Amazon, который успешно работал раньше, но сегодня не удался. Я не могу точно понять, что происходит, но я предполагаю, что это связано с синтаксическим анализатором или Javascript. Я использую следующий код.

from bs4 import BeautifulSoup
import requests

response = requests.get('https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords=9780307397980',headers={'User-Agent': b'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'})
html = response.content
soup = BeautifulSoup(html, "html.parser")
resultcol = soup.find('div', attrs={'id':'resultsCol'})

Раньше я получал данные в resultcol, но теперь они пустые. Когда я проверяю html, я вижу тег, который ищу, т.е. <div id="resultsCol" class=\'\' >. Но soup не содержит этого текста. Может кто-нибудь помочь мне отладить это? Раньше он работал совершенно нормально, но теперь это не так.

Ответы [ 2 ]

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

Удалите заголовки, и это должно работать.

from bs4 import BeautifulSoup
import requests
response = requests.get('https://www.amazon.com/s/ref=nb_sb_noss?url=search-    alias%3Dstripbooks&field-keywords=9780307397980')
html = response.content
soup = BeautifulSoup(html, "html.parser")
resultcol = soup.find('div', attrs={'id':'resultsCol'})`
0 голосов
/ 13 сентября 2018

Вам нужно дождаться полной загрузки страницы.Вы должны использовать phantomJs, чтобы убедиться, что страница загружена правильно.

Мне удалось получить правильный элемент с помощью следующего кода.

import requests
from bs4 import BeautifulSoup
from selenium import webdriver

url = ("https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3D"
       "stripbooks&field-keywords=9780307397980")

browser = webdriver.PhantomJS()
browser.get(url)
html = browser.page_source
soup = BeautifulSoup(html, 'lxml')
resultcol = soup.find('img', attrs={'class': 's-access-image'})
print resultcol
...