在第11章中使无聊的东西教程自动化之后, 我很幸运 Google搜索项目。貌似正确下载了HTML数据,但是当我使用beautifulsoup选择结果链接时,却什么也没得到。根据这本书,它说使用soup.select('.r a')
并且没有选择任何内容。
在阅读文档时,我尝试使用不同的语法soup.select('[class~=r]')
来希望获得beautifulsoup来选择某些内容,但事实并非如此。我也尝试过选择不同的类,但也没有这样做,所以我认为我做的事情根本上是错误的。
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))
来检查正在选择的beautifulsoup,但是我什么也没得到,只有[]
。
答案 0 :(得分:1)
替换此:
linkElems = soup.select('div#main > div > div > div > a')
使用:
linkElems = soup.select('div#main > div > div > div > a')
答案 1 :(得分:0)
由于您向Google提出了请求,因此无法使用。如果我在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随机抽取的,并且很快就会破解,或者对您完全不起作用。最下面的示例效果很好。