python网络爬虫批量获取百度百科词条 使用request和beautifulsoup

理论上可以直接批量处理百度百科词条,但是存在如下问题:

  1. 百度百科需要比较严格的输入搜索名称,模糊搜索能力不强
  2. 百度百科在不输入词条后面的id时,请求频率太高会弹出error
  3. 百度百科可能会弹出一词多义选择,需要额外处理。

因此,选择直接使用百度搜索,利用搜索向百度百科进行跳转。
按照常理来讲,可以直接在搜索结果中检索所有标题,再用正则表达式判断网址中是否包含baike。
实际上,由于baidu自身的推广政策,在进行百度搜索时,第一条在很多情况下都是百度百科,因此,直接使用bs4 find第一条,直接跳转即可。
贴上代码如下:

import requests
import time
from bs4 import BeautifulSoup

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
}

f2 = open("test.csv", "r", encoding="UTF-8")
nameListPre = f2.readlines()
nameList = []
for namePre in nameListPre:
    nameList.append(namePre[:-1])
# print(nameList)

f2.close()

for name in nameList:
    r = requests.get("https://www.baidu.com/s?ie=UTF-8&wd=唐" + name, headers=headers)
    r.encoding = r.apparent_encoding
    bs1 = BeautifulSoup(r.text, 'html.parser')
    url2 = bs1.find('h3').find('a').get('href')
    r2 = requests.get(url2, headers=headers)
    r2.encoding = r2.apparent_encoding
    f1 = open("./html/" + name + ".html", "w", encoding="UTF-8")
    f1.write(r2.text)
    f1.close()
    print(name+"已完成\n")
    # break
    time.sleep(3)

代码中涉及到本地的数据特征,仅供参考,有疑问可评论讨论,共同进步。
request库和bs4库细节建议自行搜索文档,文档详细度远高于相关参考书籍。

发布了90 篇原创文章 · 获赞 65 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ctsnevermore/article/details/104452720