Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 谷歌排名前五_Python_Beautifulsoup - Fatal编程技术网

Python 谷歌排名前五

Python 谷歌排名前五,python,beautifulsoup,Python,Beautifulsoup,我试图自学网络垃圾,因此一直在阅读《自动化无聊的东西》一书的第11章,如下所示: 让我陷入困境的一个部分是,在一个练习中,你可以打开谷歌搜索的前四个搜索结果,不管你的剪贴板上有什么词 当我运行代码时,即使从书中复制和粘贴代码,它似乎也不会像书中所说的那样存储任何结果。我尝试过跟踪这个问题,我认为问题是当我将搜索网页保存为变量时,它不会保存任何内容。因此,当它试图打开前五页时,没有任何页面可打开。下面是我的代码。我从书中所做的唯一更改是将“lxml”添加到漂亮的soup命令中 #! python

我试图自学网络垃圾,因此一直在阅读《自动化无聊的东西》一书的第11章,如下所示:

让我陷入困境的一个部分是,在一个练习中,你可以打开谷歌搜索的前四个搜索结果,不管你的剪贴板上有什么词

当我运行代码时,即使从书中复制和粘贴代码,它似乎也不会像书中所说的那样存储任何结果。我尝试过跟踪这个问题,我认为问题是当我将搜索网页保存为变量时,它不会保存任何内容。因此,当它试图打开前五页时,没有任何页面可打开。下面是我的代码。我从书中所做的唯一更改是将“lxml”添加到漂亮的soup命令中

#! 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来完成URL
urlToOpen=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时,列表是空的。你能告诉我为什么会发生这种情况吗