基于Python、requests、bs4库爬取百科词条

基于Python、requests、bs4库爬取百科词条

一、分析百科词条URL

1、在百科里输入词条,如:网络爬虫。显示如下图

基于Python、requests、bs4库爬取百科词条_第1张图片

在地址栏中的url为: https://baike.baidu.com/item/网络爬虫,因此可按如下方式构建初始URL

url = "https://baike.baidu.com/item/{}".format(keyword)

二、利用requests获取响应并通过bs4库可以将信息以节点方式返回

利用requests库中的get函数获取页面信息,如下所示:

def getHTMLText(url):
    i = 0
    while i<3:#最大重连次数
        try:
            #模拟浏览器获取百科词条信息
            headers = {
                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
            r = requests.get(url, headers=headers, timeout=5)
            r.raise_for_status()  # 如果不是200,产生异常requests.HTTPError
            r.encoding = r.apparent_encoding # 改变编码方式
            soup = BeautifulSoup(r.text, 'html.parser') #利用bs4解析网页
            return soup
        except requests.exceptions.RequestException:
            i += 1
    return '连接超时'

四、分析具体节点,提取所需信息

利用火狐浏览器,按F12进入开发者模式,查看具体网页元素信息,如下图基于Python、requests、bs4库爬取百科词条_第2张图片

由图可以看出,百科词条的简介信息主要在两个dl节点中,且具有basicInfo-block basicInfo-left和basicInfo-block basicInfo-right属性,因词利用下面的方法获取该词条具体简介信息。

objSoup = getHTMLText(url)  # 利用bs4库解析传入的URL
    test_left = objSoup.find('dl', attrs='basicInfo-block basicInfo-left')  # 获取百科页面左部植物属性
    test_right = objSoup.find('dl', attrs='basicInfo-block basicInfo-right')  # 获取百科页面右部植物属性

你可能感兴趣的:(基于Python、requests、bs4库爬取百科词条)