Python 如何使用bs4正确打印谷歌搜索结果?

Python 如何使用bs4正确打印谷歌搜索结果?,python,beautifulsoup,request,Python,Beautifulsoup,Request,我有一个工作代码,它首先打印搜索标题,然后打印URL,但它在网站标题之间打印了很多URL。但是如何以这样的格式打印它们,并避免为每个URL打印相同的URL 10次: 1) Title url 2) Title url and so on... 我的代码: search = input("Search:") page = requests.get(f"https://www.google.com/search?q=" + search) soup =

我有一个工作代码,它首先打印搜索标题,然后打印URL,但它在网站标题之间打印了很多URL。但是如何以这样的格式打印它们,并避免为每个URL打印相同的URL 10次:

1) Title url
2) Title url
and so on... 
我的代码:

search = input("Search:")

page = requests.get(f"https://www.google.com/search?q=" + search)

soup = BeautifulSoup(page.content, "html5lib")

links = soup.findAll("a")

heading_object = soup.find_all('h3')

for info in heading_object:
    x = info.getText()
    print(x)
    for link in links:
        link_href = link.get('href')
        if "url?q=" in link_href:
            y = (link.get('href').split("?q=")[1].split("&sa=U")[0])
            print(y)

如果您获得单独的标题和链接,则可以使用
zip()
将它们成对分组

for info, link in zip(heading_object, links):
    info = info.getText()

    link = link.get('href')
    if "?q=" in link:
        link = link.split("?q=")[1].split("&sa=U")[0]

    print(info, link)


但当页面上不存在某些标题或链接时,这可能会有问题,因为这样会创建错误的对。它将为下一个元素将标题与链接配对。您应该搜索保留标题和链接的元素,并在每个元素内搜索单个标题和单个链接以创建一对。如果没有标题或链接,那么您可以输入一些默认值,这样就不会创建错误的对。

我不希望这只适用于BeautilSoup和简单的get请求,因为google使用JS呈现了很多页面。您可能希望查看标题中的.Code:for-info\U-object:x=info.getText()中的链接:link\U href=link.get('href')if“url?q=”in-link\U href:y=(link.get('href').split(“?q=”)[1]。split(&sa=U”)[0])打印(x,y)给我所需的结果,但它从谷歌打印出每个结果的大约10份副本。总是把代码、数据和完整的错误消息作为有问题的文本(不是截图,不是链接)(不是评论)。您应该以不同的方式搜索它-首先查找同时保留
title
url
的对象,然后在此对象内搜索单个
title
url
,以获得成对的对象。最后,您应该使用
zip(heading\u object,links)
创建对,但如果页面上的某些项目(title或link)为空,则可能会给出错误的结果,因为这样会将其他项目移动到此位置。我编辑了代码。问题是它会打印出在谷歌搜索页面上找到的所有url。谢谢,现在它会在一行上打印标题和链接。但唯一的问题是它打印的不是完整的url,比如“/?sa=X&ved=0ahUKEwirhbTIh5fvAhVmyDgGHYGlCscQOwgC”或者“/?output=search&ie=UTF-8&sa=X&ved=0ahUKEwirhbTIh5fvAhVmyDgGHYGlCscQPAgE”。我不知道如何修复它。我不知道如何修复它-如果需要完全修复,请删除
if
。你们将看到你们从服务器上得到了什么。它可能会为不同的设备发送不同的HTML(特别是如果他们使用了错误的头
用户代理
,并且他们没有使用
JavaScript