当前位置: 移动技术网 > IT编程>脚本编程>Python > 【Python3爬虫】百度百科爬虫

【Python3爬虫】百度百科爬虫

2018年07月31日  | 移动技术网IT编程  | 我要评论

天网恢恢小品,邓亚萍资料,山西消防

实现目标:爬取百度百科上python词条页面上的所有词条。

 

目标分析:

 编写函数get_urls()爬取python词条页面上的所有词条的url,得到url后再用get_page()函数爬取该词条的页面内容,我们的目标是获得每个词条页面上的标题和简介内容,然后将爬取下来的信息利用pandas库保存到csv文件中。

 

具体分析:

选择第一个词条计算机程序设计语言时可以看到<a target="_blank" href="/item/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E8%AF%AD%E8%A8%80">计算机程序设计语言</a>,因为每个词条的链接前面部分都是https://baike.baidu.com/item/,所以我们要获得item/后面的部分,再拼接成该词条的url。

 

对于每个词条,我们要爬取它的标题和简介内容,就要获取页面上的<h1>元素和<meta name="description">元素,都可以利用正则表达式进行匹配。

 

 

代码实现:

 1 # 爬取Python百度百科词条
 2 import requests
 3 import re
 4 import pandas as pd
 5 
 6 headers = {
 7     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 "
 8                   "Safari/537.36"
 9 }
10 
11 title_list = []
12 description_list = []
13 
14 
15 def get_urls(url):
16     hrefs = []
17     res = requests.get(url, headers=headers)
18     res.encoding = "utf-8"
19     data = re.findall(r'<a target=_blank href="/item/(.*?)">', res.text)
20     for i in data:
21         hrefs.append("https://baike.baidu.com/item/" + i)
22     for href in hrefs:
23         if '"' in href:
24             href = href[:href.index('"')]
25         get_page(href)
26 
27 
28 def get_page(url):
29     res = requests.get(url, headers=headers)
30     res.encoding = "utf-8"
31     t = re.search(r'<h1 >(.*?)</h1>', res.text)
32     title = t.group().lstrip('<h1 >').rstrip('</h1>').strip()
33     d = re.search(r'name="description" content="(.*?)"', res.text)
34     description = d.group().lstrip('name="description" content="').rstrip('"').strip()
35     title_list.append(title)
36     description_list.append(description)
37 
38 
39 if __name__ == '__main__':
40     url = "https://baike.baidu.com/item/Python/407313?fr=aladdin"
41     get_page(url)
42     get_urls(url)
43     infos = {'title': title_list, 'description': description_list}
44     data = pd.DataFrame(infos, columns=['title', 'description'])
45     data.to_csv("Python词条.csv")
46     print("爬取成功!")

 

 结果截图:

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网