用python抓取google搜索url列表

用python抓取google搜索url列表,python,web,web-crawler,Python,Web,Web Crawler,我想用python刮谷歌搜索结果url 这是我的密码 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 = Beauti

我想用python刮谷歌搜索结果url

这是我的密码

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')
然后我可以得到结果。列表的第一个url是wikipedia.com

'', “?q=computer&num=100&ie=UTF-8&prmd=ivnsbp&tbm=isch&tbo=u&source=univ&sa=X&ved=0AHUKEWIXYFU7Q5HDAHWR3LQKHUFODCSQAQIHG”

我想获取干净的url,它是“”,包括本例中的所有其他搜索结果

如何修改代码

已编辑:如下图所示,我想要得到的是真实的url(标记为黄色),而不是上面凌乱而冗长的url

附加内容怎么样

.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开发者工具,url看起来很干净

因为它属于
,所以您的代码应该可以正常工作并返回干净的url

相反,如果你更换

result.append(i.find('a', href = True) ['href'][7:])

然后,在我的终端中,它为上述链接返回以下内容:

/url?q=https://en.wikipedia.org/wiki/Computer&sa=U&ved=0ahUKEwinqcqdypHdAhVhKH0KHVWIBEUQFggfMAU&usg=AOvVaw1pduIWw_TSCJUxtP9W_kHJ
您可以看到
/url?q=
已被预先添加,并且
&;sa=U&;ved=0AHUKEWINQCQDYPHDAHVHKH0KHVWIBEUQFGFMAU&;usg=AOvVaw1pduIWw_TSCJUxtP9W_kHJ
已追加

通过查看其他链接,我发现前面的部分看起来总是像
/url?q=
,而后面的部分总是以
&
开头

因此,我相信我最初的答案应该是可行的:

result.append(i.find('a', href = True) ['href'][7:].split('&')[0])
[7://code>删除带前缀的字符串,并
拆分('&')[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

这是唯一可行的一个环节,他放弃了那里。如果有一个链接不包含符号和,它就会崩溃。@Josephsuengjaedolar对,我需要对收集的每个url应用通用方法。@Josephsuengjaedolar我很确定它不会崩溃,如果链接不包含与号,它将保持原样。@WookeunLee+链接通常被
&
弄得“不干净”,因此您可以继续添加相应的条件(
.split(“?”)[0]
),直到得到所需的结果。“不过,我的结果在单独使用安培和分割法时看起来不错。”wookiekim我修改了我的问题,请再次检查。
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