基本过程:
1)输入:待查询的关键词
2)处理:获得百度搜索结果页面后对页面内容解析处理
3)输出:返回链接的标题的列表
例子:
百度搜索首页为http://www.baidu.com,当输入一个搜索词后,url会变成:http://www.baidu.com/s?wd=keyword,我们可以手动输入这个链接,把keyword换成我们要的关键词,都可以获得查询结果,所以我们可以通过request的get()函数提交查询,响应结果为百度搜索到的结果。
现在我们要找到的是返回结果的标题,下边是百度搜索后的源码:
可以发现标题是在div标签的data-tools属性的json格式的数据中,名叫“title”,在对它进行操作的时候可以用json库将其转换为字典,便于操作,下边就是这么做的,源码:
import requests
from bs4 import BeautifulSoup
import re
import json
def getKeywordResult(keyword):
url = 'http://www.baidu.com/s?wd='+keyword #百度搜索的url构成
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()
r.encoding = 'utf-8'
return r.text
except:
return ""
def parserLinks(html):
soup = BeautifulSoup(html, "html.parser")
links = []
for div in soup.find_all('div',{'data-tools':re.compile('title')}): #筛选,只查找所有dev标签下的data-tools属性下的带有title的字符串
data = div.attrs['data-tools'] #尖括号<>中的标签的名字是name,尖括号中的其他项是attrs,这里的这个data-tools就是那个其他项喽,尖括号之间的内容是string
d = json.loads(data) #将属性由json转换成字典
links.append(d['title']) #返回返回链接的题目,就是查询到的内容的标题
return links
def main():
html = getKeywordResult('Python 语言程序设计基础(第2版)')
ls = parserLinks(html)
count = 1
for i in ls:
print("[{:^3}]{}".format(count, i))
count += 1
main()
运行结果: