python web抓取代码不会打开链接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python web抓取代码不会打开链接相关的知识,希望对你有一定的参考价值。
这是“用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'))
简短的回答是您的网址没有返回结果。这是一个提供结果的URL:https://www.google.com/search?q=python。
我更改了代码中的一行以使用此模板:“https://www.google.com/search?q= {0}我看到linkElems非常重要。
简而言之,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。
希望这可以帮助
以上是关于python web抓取代码不会打开链接的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫编程思想(145):使用Scrapy Shell抓取Web资源
Python爬虫编程思想(145):使用Scrapy Shell抓取Web资源