python - 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)
我似乎无法在这里找到问题。
解决方案
您可能需要添加标题才能访问 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。
推荐阅读
- python - Python列表比较numpy优化
- flutter - 应用程序无法正常工作,因为
&/ 未处理的异常:“String”类型不是“FutureOr”类型的子类型 - typescript - ApolloServer 模式选项
- mysql - 具有动态值和 1 列结果的子字符串索引
- python - 自动化无聊的东西 - Shutil.copy() 函数 - 没有这样的文件/文件夹错误
- javascript - 如何在不创建新用户的情况下使用电话验证
- javascript - for-in 循环不执行类函数
- azure - VNET 中的 AZURE 事件中心是否用于过滤?
- asp.net - “参数无效”asp.net位图,使用cypress上传图片
- python-3.x - Project Euler #246:切线与切线之间的椭圆角