Python 谷歌排名前五
我试图自学网络垃圾,因此一直在阅读《自动化无聊的东西》一书的第11章,如下所示: 让我陷入困境的一个部分是,在一个练习中,你可以打开谷歌搜索的前四个搜索结果,不管你的剪贴板上有什么词 当我运行代码时,即使从书中复制和粘贴代码,它似乎也不会像书中所说的那样存储任何结果。我尝试过跟踪这个问题,我认为问题是当我将搜索网页保存为变量时,它不会保存任何内容。因此,当它试图打开前五页时,没有任何页面可打开。下面是我的代码。我从书中所做的唯一更改是将“lxml”添加到漂亮的soup命令中Python 谷歌排名前五,python,beautifulsoup,Python,Beautifulsoup,我试图自学网络垃圾,因此一直在阅读《自动化无聊的东西》一书的第11章,如下所示: 让我陷入困境的一个部分是,在一个练习中,你可以打开谷歌搜索的前四个搜索结果,不管你的剪贴板上有什么词 当我运行代码时,即使从书中复制和粘贴代码,它似乎也不会像书中所说的那样存储任何结果。我尝试过跟踪这个问题,我认为问题是当我将搜索网页保存为变量时,它不会保存任何内容。因此,当它试图打开前五页时,没有任何页面可打开。下面是我的代码。我从书中所做的唯一更改是将“lxml”添加到漂亮的soup命令中 #! python
#! python3
# lucky.py - Opens several Google search results.
import requests, sys, webbrowser, bs4
print('Googling...') # display text while downloading the Google page
res = requests.get('http://google.com/search?q=' + ' '.join(sys.argv[1:]), 'lxml')
res.raise_for_status()
# Retrieve top search result links.
soup = bs4.BeautifulSoup(res.text, 'lxml')
# 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'))
谢谢我觉得你所做的很有趣,我想帮助你。我没有看你的书,但这里有一个你可以修改的工作脚本
#!/usr/bin/python3
import requests
import sys
import webbrowser
word_to_search='test'
request = requests.get('http://google.com/search?q='+word_to_search)
content=request.content.decode('UTF-8','replace')
#
# Parse the content and get the links. I had a problem with
# bs4 so I manually searched over the content
#
links=[]
while '<h3 class="r">' in content:
content=content.split('<h3 class="r">', 1)[1]
split_content=content.split('</h3>', 1)
link='http'+split_content[1].split(':http',1)[1].split('%',1)[0]
links.append(link)
content=split_content[1]
for link in links[:5]: # max number of links 5
webbrowser.open(link)
#/usr/bin/python3
导入请求
导入系统
导入网络浏览器
单词“to”\u search='test'
请求=请求。获取('http://google.com/search?q=“+字词搜索)
content=request.content.decode('UTF-8','replace')
#
#解析内容并获取链接。我和你有问题
#所以我手动搜索了内容
#
链接=[]
当“”在内容中时:
content=content.split(“”,1)[1]
拆分内容=内容。拆分(“”,1)
link='http'+split_内容[1]。拆分(':http',1)[1]。拆分('%',1)[0]
links.append(link)
内容=拆分内容[1]
对于链接中的链接[:5]:#最大链接数5
网络浏览器打开(链接)
可能您的脚本无法运行,因为没有
”。RA'
是否从命令行运行代码并将其传递给参数
如果没有搜索词,url请求将重定向到Google主页,那里没有符合搜索条件的HTML元素
当使用参数从命令行运行时,中的代码起作用。
我所做的唯一更改是切换到html5lib解析器
若要查看缺少命令行参数是否是问题所在,请尝试以下代码:
import requests, sys, webbrowser, bs4
search_term = 'python'
print('Googling...') # display text while downloading the Google page
res = requests.get('http://google.com/search?q={0}'.format(search_term), 'lxml')
res.raise_for_status()
# Retrieve top search result links.
soup = bs4.BeautifulSoup(res.text, 'lxml')
# 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 your_code.py things to search for
根据书的版本,你可能会在pypi.org网站而不是谷歌上搜索。在pypi.org上查看搜索结果时,您会看到所需的元素是
“package snippet”
,因此您可以使用href来完成URLurlToOpen=http://pypi.org'+linkElems[i].get('href')
这是元素的外观:
。在本例中,参数中传递的搜索词是“无聊的东西”
,而“无聊的东西”
(用于wsgi兼容应用程序的小型HTTP web服务器)恰好是第一个结果。href将是“/project/boring/”
,我们稍后会将其加入基本url
#!/usr/bin/env python3
# searchpypi.py - Opens several search results.
import requests, sys, webbrowser, bs4
print('Searching...') #Display text while downloading search result page.
res = requests.get('https://pypi.org/search/?q=' + ' '.join(sys.argv[1:]))
print(sys.argv[1:])
res.raise_for_status()
# Retrieve top search result links.
soup = bs4.BeautifulSoup(res.text, 'html.parser')
#Open a browser tab for each result, the element looks like this when search the term "boring stuff": <a class="package-snippet" href="/project/boring/">
linkElems = soup.select('.package-snippet')
numOpen = min(5, len(linkElems))
for i in range(numOpen):
# join the href to the base url
urlToOpen = 'http://pypi.org' + linkElems[i].get('href')
print('Opening', urlToOpen)
webbrowser.open(urlToOpen)
#/usr/bin/env蟒蛇3
#searchpypi.py-打开多个搜索结果。
导入请求,系统,网络浏览器,bs4
打印(“搜索…)#下载搜索结果页面时显示文本。
res=requests.get('https://pypi.org/search/?q=“+”.join(sys.argv[1:]))
打印(sys.argv[1:]
res.为_状态提高_()
#检索顶部搜索结果链接。
soup=bs4.BeautifulSoup(res.text,'html.parser')
#为每个结果打开浏览器选项卡,搜索术语“无聊的东西”时元素如下所示:
linkElems=soup.select('.package snippet')
numOpen=min(5,len(linkElems))
对于范围内的i(numOpen):
#将href加入基本url
urlToOpenhttp://pypi.org'+linkElems[i].get('href')
打印('打开',urlToOpen)
webbrowser.open(urlToOpen)
要运行此命令,您需要在保存searchpypi.py
的文件夹中的终端中,输入命令:python3 searchpypi.py
它使用文件名后面的参数,在本例中,
“无聊的东西”
作为搜索词。这可以更改为您想要搜索的任何内容。谢谢,似乎在没有命令行的情况下也可以。我认为它必须像你说的那样在命令行中。当我打印linkElems时,列表是空的。你能告诉我为什么会发生这种情况吗