使用Python获取百度搜索结果网址

时间:2017-03-13 05:48:32

标签: python html beautifulsoup urllib serp

我试图从百度获取搜索结果。 但现在我被困在这里:

import sys
import urllib
import urllib2
from bs4 import BeautifulSoup
question_word = "Hello"
url = "http://www.baidu.com/s?wd=" +     urllib.quote(question_word.decode(sys.stdin.encoding).encode('gbk'))
htmlpage = urllib2.urlopen(url).read()
soup = BeautifulSoup(htmlpage)
for child in soup.findAll("h3", {"class": "t"}):
    print child.contents[0]

这将返回具有目标网址的所有标记。 我不知道如何使用.get(' href')列出实际网址

我是Python的新手,因此可能会对基本概念产生一些困惑。 我非常感谢你的帮助。

谢谢!

2 个答案:

答案 0 :(得分:4)

for child in soup.findAll("h3", {"class": "t"}):
    print child.a.get('href')

使用.获取a代码中的下一个h3代码,然后您可以使用.get()

答案 1 :(得分:1)

有一些选项可以获取 href,这里有两个选项:.a.get('href').a['href']

您还可以使用 SelectorGadget 来获取 CSS 选择器并使用 select()select_one() 方法来查找您要查找的内容并使用 {{1 }}。

代码和full example

for loop

输出:

from bs4 import BeautifulSoup
import requests
import lxml

headers = {
    "User-Agent":
    "Mozilla/5.0 (Linux; Android 10; HD1913) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 Mobile Safari/537.36 EdgA/46.1.2.5140"
}

response = requests.get('https://www.baidu.com/s?tn=baidu&wd=lasagna', headers=headers).text

soup = BeautifulSoup(response, 'lxml')

for link in soup.select('.result .t a'):
  links = link['href']
  print(links)

或者,您可以使用来自 SerpApi 的 Baidu Organic Results API。 这是一个免费试用的付费 API。

要集成的代码:

http://www.baidu.com/link?url=HsRYa1X1Me8F9GY13KcqBcfFuLv1ST0OgGrTV-czCKVjRFlnzBIkhefpxX7Qy5a1vmfDn2sfZm_oJ9MB5dsthKQp8-oUt5QAQWjtTepQ46O
http://www.baidu.com/link?url=BShcWZT386OcLGiTRZZvHVYxk3c5RJg8xP7NmWyzzelEgMi4Udwsmkn_0HKwm3bAYwD4vijoRAAsPkfU03Gvv_
http://www.baidu.com/link?url=YYtyQWUvIzNvsul5yxH16yYtuvgQG7otyqUlc218FmFKR3It4jnLn69Iuk8h9wAx
http://www.baidu.com/link?url=l-_isPDZWm36Hu8otKlJYz6PM80wnr8gEXS9NcuQ-lj7xIWrIBCW6-s8J-ovtiZZeUqosqAOOMpSlclq2CHN7_
http://www.baidu.com/link?url=86Rh7aSzzMlVz6Upzra57OKMc4sMZkTgECNk9IQi493D6jDqtNYSSaYNHDSeXZ40zpU29RxRvq6W7xm4O8FNVq
http://www.baidu.com/link?url=91g1S6LBPAA3sXIU3b-OSsbNVYvBUS6iD6FzAoTdNS_NBQn1L5uHvvo8X8RialUm
http://www.baidu.com/link?url=wkVK0QjvpTMNxQuvIy--P8BHeW8oeSkBizDxP2JDtWcT4AZ5DCYd-DDLjWBwQ7Lj

输出:

import os
from serpapi import GoogleSearch

params = {
    "engine": "baidu",
    "q": "(意大利)千层面",
    "api_key": os.getenv("API_KEY"),
}

search = GoogleSearch(params)
results = search.get_dict()


for organic_result in results["organic_results"]:
  if 'link' in organic_result:
    print(f"Link: {organic_result['link']}")
<块引用>

免责声明,我为 SerpApi 工作。