python web抓取代码不会打开链接

问题描述 投票:1回答:2

这是“用python自动化无聊的东西”一书。起初我创建了一个.bat文件并使用cmd中的参数运行它,没有打开chrome中的任何页面,在这里查看,更改了代码,仍然执行完美并打印出打印行,但它没有打开标签,因为它应该。我究竟做错了什么?提前致谢

#! python3
# lucky.py opens several google search matches

import requests,sys,webbrowser,bs4
searchTerm1 = 'python'
print('Googling...')
res = requests.get('https://www.google.com/search?={0}'.format(searchTerm1))
res.raise_for_status()

#retrieve top search result links
soup = bs4.BeautifulSoup(res.text,"html.parser")

#open a browser tab for each result.
linkElems = soup.select('.r a')
numOpen = min(5,len(linkElems))
for i in range(numOpen):
    webbrowser.open('http://google.com' + linkElems[i].get('href'))
python web-scraping beautifulsoup
2个回答
0
投票

简短的回答是您的网址没有返回结果。这是一个提供结果的URL:https://www.google.com/search?q=python

我更改了代码中的一行以使用此模板:“https://www.google.com/search?q= {0}我看到linkElems非常重要。


-1
投票

简而言之,webbrowser没有打开任何页面因为numOpen为0,所以for循环尝试迭代0项,这导致循环块(webbrowser.open)中的代码无法执行。

更长,更详细的解释为什么numOpen = 0是由于初始GET请求发生的重定向,给定您的自定义Google查询。请参阅this answer了解如何规避这些问题,因为有很多方法 - 最简单的可能是使用Google搜索API。

作为重定向的结果,您的BeautifulSoup搜索将不会返回任何成功的结果,导致numOpen变量设置为0,因为没有列表元素。由于没有列表元素,for循环不会执行。

您可以通过简单地在整个脚本中添加print语句来查看哪些打印语句无法执行以及查看变量及其返回值,从而可以自行调试这样的事情,快速而肮脏但不完美。

另外,shebag也应该设置为#!/usr/bin/env python3而不是简单的#! python3。参考here

希望这可以帮助

© www.soinside.com 2019 - 2024. All rights reserved.