2017-04-20 90 views
0

我想访问谷歌搜索结果的前五位(或任何指定数量)的链接。通过研究,我发现并修改了以下代码。如何使用Beautifulsoup访问排名前五的谷歌搜索结果链接

import requests 
from bs4 import BeautifulSoup 
import re  
search = raw_input("Search:") 
page = requests.get("https://www.google.com/search?q=" + search) 
soup = BeautifulSoup(page.content, "lxml") 
links = soup.find("a") 
print links.get('href') 

这会返回页面上的第一个链接,每次看起来都是Google图片选项卡。

这不完全是我想要的。对于初学者,我不希望任何谷歌网站的链接,只是结果。另外,我需要前三或五个或任何指定数量的结果。

我该如何使用python来做到这一点?

提前致谢!

回答

0

对你更具体的选择。请注意,结果div有这个类“_NId”。所以选择该div内的第一个链接。

result_divs = soup.findAll('div', {'class': '_NId'})[:4] 
links = [div.find('a') for div in result_divs] 
hrefs = [link.get('href') for link in links] 
0

我想你可以使用:

import requests 
from bs4 import BeautifulSoup 
import re 
search = raw_input("Search:") 
results = 100 # valid options 10, 20, 30, 40, 50, and 100 
page = requests.get("https://www.google.com/search?q={}&num={}".format(search, results)) 
soup = BeautifulSoup(page.content, "html5lib") 
links = soup.findAll("a") 
for link in links : 
    link_href = link.get('href') 
    if "url?q=" in link_href and not "webcache" in link_href: 
     print link.get('href').split("?q=")[1].split("&sa=U")[0] 
0

一个老问题,但它可以帮助别人以后......你可以用“开始”的10(多为上一个结果指定结果数页面)并将其插入到循环中。下面的示例获得前200个结果。注意字符串转换。

s='AAPL' 
for mypage in range(0, 200, 10): 
    myurl="http://www.google.com/search?q="+s+"&start="+str(mypage) 

奖励:发现你还可以用 'HL' 指定语言:en(英语),FR(法语)等

myurl="http://www.google.com/search?hl=fr&q="+s+"&start="+str(mypage)