我想用python抓取Google搜索结果的网址。
这是我的代码
import requests
from bs4 import BeautifulSoup
def search(keyword):
html = requests.get('https://www.google.co.kr/search?q={}&num=100&sourceid=chrome&ie=UTF-8'.format(keyword)).text
soup = BeautifulSoup(html, 'html.parser')
result = []
for i in soup.find_all('h3', {'class':'r'}):
result.append(i.find('a', href = True) ['href'][7:])
return result
search('computer')
然后我可以得到结果。列表的第一个网址是wikipedia.com,
'https://en.wikipedia.org/wiki/Computer&sa=U&ved=0ahUKEwixyfu7q5HdAhWR3lQKHUfoDcsQFggTMAA&usg=AOvVaw2nvT-2sO4iJenW_fkyCS3i', '?q = computer&num = 100&ie = UTF-8&prmd = ivnsbp&tbm = isch&tbo = u&source = univ&sa = X&ved = 0ahUKEwixyfu7q5HdAhWR3lQKHUfoDcsQsAQIHg'
我想获取干净的URL,即“ https://en.wikipedia.org/wiki/Computer”,包括本例中的所有其他搜索结果。
如何修改代码?
已编辑:如下面的图片所示,我想获取真实的网址(标记为黄色),而不是上面的凌乱且冗长的网址。
答案 0 :(得分:0)
如何追加
.split('&')[0]
以这样的方式对您的代码进行修改:
import requests
from bs4 import BeautifulSoup
def search(keyword):
html = requests.get('https://www.google.co.kr/search?q={}&num=100&sourceid=chrome&ie=UTF-8'.format(keyword)).text
soup = BeautifulSoup(html, 'html.parser')
result = []
for i in soup.find_all('h3', {'class':'r'}):
result.append(i.find('a', href = True) ['href'][7:].split('&')[0])
return result
search('computer')
[编辑]
以https://en.wikipedia.org/wiki/Computer
为例:
通过chrome开发人员工具,网址看起来很干净。
由于它属于<h3 class="r">
,因此您的代码应该可以正常工作并返回干净的url。
相反,如果您替换
result.append(i.find('a', href = True) ['href'][7:])
使用
print i
然后在我的终端中,为上述链接返回以下内容:
/url?q=https://en.wikipedia.org/wiki/Computer&sa=U&ved=0ahUKEwinqcqdypHdAhVhKH0KHVWIBEUQFggfMAU&usg=AOvVaw1pduIWw_TSCJUxtP9W_kHJ
您会看到/url?q=
已被附加,&sa=U&ved=0ahUKEwinqcqdypHdAhVhKH0KHVWIBEUQFggfMAU&usg=AOvVaw1pduIWw_TSCJUxtP9W_kHJ
已被附加。
通过查看其他链接,我发现前置部分始终看起来像/url?q=
,而附加部分总是以&
开头。
因此,我相信我的原始答案应该有效:
result.append(i.find('a', href = True) ['href'][7:].split('&')[0])
[7:]
删除前置的字符串,并split('&')[0]
附加的字符串。
答案 1 :(得分:0)
我找到了解决方法。
此搜索功能的修改有效。
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
html = requests.get('https://www.google.co.kr/search?q={}&num=100&sourceid=chrome&ie=UTF-8'.format(keyword), headers = headers).text