我有一个脚本来从亚马逊提取书籍信息,这些信息之前成功运行但今天失败了。我无法确切地知道出了什么问题,但我假设其解析器或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
没有这个文本。任何人都可以帮我调试吗?它以前工作得非常好,但现在却没有。
您需要等到页面完全加载。您必须使用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
删除标题,它应该工作。
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'})`