首页 > 解决方案 > Python 简单的网页抓取

问题描述

这是一个自定义代码,如自动化无聊的东西网页抓取第 11 章。但我似乎无法让它工作,所以我稍微改变了它。但我仍然会得到一个空列表作为回报。

我在 cmd 中运行这个脚本,例如脚本的标题是 allsearch.py​​ ,它将是 allsearch.py​​ 你想在 cmd 中搜索的东西。

import requests, sys, webbrowser, bs4

print('Searching...')    # display text while downloading the search result page
res = requests.get('https://www.google.com/search?q=' + ' '.join(sys.argv[1:]))

try:
    res.raise_for_status()  
except Exception as Ex:
    print(f'Error as occur: {Ex}')

if res.status_code == 200:
    print('Success')
else:
    print('Not Found')

# Retrieve top search result links.
soup = bs4.BeautifulSoup(res.text, 'html.parser')
# Open a browser tab for each result.
linkElems = soup.select('a href')
print(linkElems)

#Opening the searches
numOpen = min(5, len(linkElems))
for i in range(numOpen):
    urlToOpen = 'https://www.google.com/search?q=' + linkElems[i].get('href')
    print('Opening', urlToOpen)
    webbrowser.open(urlToOpen)

我似乎无法在这里找到问题。

标签: pythonweb-scrapingbeautifulsouppython-requests

解决方案


您可能需要添加标题才能访问 google 结果,因此请从以下内容开始:

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}

res = requests.get('https://www.google.com/search?q=' + ' '.join(sys.argv[1:]), headers=headers)

然后,对于linkElems

linkElems = soup.select("div.r a[href]")

这意味着找到所有a具有href, 位于 with 下div的标签class='r'。这是a[href]仅从结果中获取,而不是从页面中的其他位置获取。

要打开href链接,请在最后一个循环中执行以下操作:

urlToOpen = linkElems[i].get('href')
#...

,因为href已经存储了完整的 url。


推荐阅读