「Python3爬虫教程」百度百科爬虫
实现目标:爬取百度百科上python词条页面上的所有词条。
目标分析:
编写函数get_urls()爬取python词条页面上的所有词条的url,得到url后再用get_page()函数爬取该词条的页面内容,我们的目标是获得每个词条页面上的标题和简介内容,然后将爬取下来的信息利用pandas库保存到csv文件中。
有需要Python学习资料的小伙伴吗?小编整理一套Python资料和PDF,感兴趣者可以关注小编后私信学习资料(是关注后私信哦)反正闲着也是闲着呢,不如学点东西啦
具体分析:
选择第一个词条计算机程序设计语言时可以看到<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">元素,都可以利用正则表达式进行匹配。
代码实现:
# 爬取Python百度百科词条 import requests import re import pandas as pd headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 " "Safari/537.36" } title_list = [] description_list = [] def get_urls(url): hrefs = [] res = requests.get(url, headers=headers) res.encoding = "utf-8" data = re.findall(r'<a target=_blank href="/item/(.*?)">', res.text) for i in data: hrefs.append("https://baike.baidu.com/item/" + i) for href in hrefs: if '"' in href: href = href[:href.index('"')] get_page(href) def get_page(url): res = requests.get(url, headers=headers) res.encoding = "utf-8" t = re.search(r'<h1 >(.*?)</h1>', res.text) title = t.group().lstrip('<h1 >').rstrip('</h1>').strip() d = re.search(r'name="description" content="(.*?)"', res.text) description = d.group().lstrip('name="description" content="').rstrip('"').strip() title_list.append(title) description_list.append(description) if __name__ == '__main__': url = "https://baike.baidu.com/item/Python/407313?fr=aladdin" get_page(url) get_urls(url) infos = {'title': title_list, 'description': description_list} data = pd.DataFrame(infos, columns=['title', 'description']) data.to_csv("Python词条.csv") print("爬取成功!")
相关推荐
chuckchen 2020-10-31
Will0 2020-10-12
Dreamhome 2020-10-09
xirongxudlut 2020-09-28
星辰大海的路上 2020-09-13
chaochao 2020-08-31
猪猪侠喜欢躲猫猫 2020-08-17
快递小可 2020-08-16
shengge0 2020-07-26
巩庆奎 2020-07-21
张文倩数据库学生 2020-07-19
xirongxudlut 2020-07-18
Ericbig 2020-07-18
kyelu 2020-07-09
liangzhouqu 2020-07-07
GuoSir 2020-06-28
chaigang 2020-06-27
pythonxuexi 2020-06-25