使用python搜寻Google搜索网址列表

时间:2018-08-29 03:44:48

标签: python web web-crawler

我想用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”,包括本例中的所有其他搜索结果。

如何修改代码?

已编辑:如下面的图片所示,我想获取真实的网址(标记为黄色),而不是上面的凌乱且冗长的网址。

enter image description here

2 个答案:

答案 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&amp;sa=U&amp;ved=0ahUKEwinqcqdypHdAhVhKH0KHVWIBEUQFggfMAU&amp;usg=AOvVaw1pduIWw_TSCJUxtP9W_kHJ

您会看到/url?q=已被附加,&amp;sa=U&amp;ved=0ahUKEwinqcqdypHdAhVhKH0KHVWIBEUQFggfMAU&amp;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