在第11章的自动化材料教程,我感到幸运的谷歌搜索项目。它似乎正确地下载了HTML数据,但是当我使用漂亮汤选择结果链接时,我什么也得不到。根据这本书,它说使用soup.select('.r a')
,它没有选择任何东西。
阅读文档时,我试着使用不同的语法soup.select('[class~=r]')
,希望得到漂亮的汤来选择一些东西,但它没有。我也尝试了选择不同的类,它也没有这样做,所以我认为我做了一些根本错误的事情。
SEARCHVAR = sys.argv[1:]
res = requests.get('http://google.com/search?q=' + ' '.join(SEARCHVAR))
res.raise_for_status()
print('Searching ' + ' '.join(SEARCHVAR[:]) + ' on Google')
soup = bs4.BeautifulSoup(res.text, 'html.parser')
print('Parsing')
linkElems = soup.select('.r a')
print(str(linkElems))
我用print(str(linkElems))
来检查什么是美丽的汤,但我一直没有得到任何东西,只有[]
。
发布于 2019-05-27 20:13:42
这是不可行的,因为你得到谷歌的请求。如果我在Google上使用chrome中的开发工具,那么div类r确实存在。但是,当我用request.get下载查询时,它已经不在了。但是,现在有一个名为“jfp3ef”的div类。我能够获得与搜索结果相关联的a标记,如下所示
soup = soup.find_all("div", {"class": "jfp3ef"})
for div in soup:
print(div.select("a"))
如果需要,可以使用urllib.request下载r类中的div的整个页面,但是Google会阻止这种行为,因此必须更改标题信息。
SEARCHVAR = sys.argv[1:]
query = 'http://google.com/search?q=' + ' '.join(SEARCHVAR)
headers = {}
headers['User-Agent'] = "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17
(KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17"
req = urllib.request.Request(query, headers= headers)
html = urllib.request.urlopen(req).read()
print('Searching ' + ' '.join(SEARCHVAR[:]) + ' on Google')
soup = bs4.BeautifulSoup(html, 'html.parser')
print('Parsing')
linkElems = soup.select('.r a')
print(str(linkElems)
这本书中的例子已经过时了。我想我在"jfp3ef“类中的最好例子是来自google的随机选择,很快就会崩溃,或者根本不适合你。下面的例子效果很好。
发布于 2020-06-02 14:21:45
代之以:
linkElems = soup.select('div#main > div > div > div > a')
通过以下方式:
linkElems = soup.select('div#main > div > div > div > a')
https://stackoverflow.com/questions/56330930
复制相似问题