利用网络爬虫获取简单信息的基本步骤是:提取网页源码——>筛选内容——>保存内容
一、提取网页源码
取网页源码方法很多,常用的库有:urllib库,requests库等。。。 具体的例程可访问我的上篇文件:
https://blog.csdn.net/scx2006114/article/details/81389331
二、筛选内容
在我的上篇文章里使用的筛选的方法是通过正则表达式完成,但正则表达式编写过程复杂,而且容易出错。在此篇文章中我向大家替换的方法,主要是应用库来代替正则表达式。
①使用 XPath
②使用 Beautiful Soup
③使用 pyquery
这三种库具体的介绍和使用教程可阅读《Python 3网络爬虫开发实战 ,崔庆才著》(文末附书本下载链接)。我以Beautiful Soup库为例,实战爬取网页内容。
目标:爬取网页简书中文章小标题和作者
环境:python3.65 pycharm软件
思路:提取网页的源码—>筛选源码—>输出结果(保持文件)
首先我们先来看看简书网页的源码:
<li id="note-29368298" data-note-id="29368298" class="have-img">
<a class="wrap-img" href="/p/d20bddb4f8d9" target="_blank">
<img data-echo="//upload-images.jianshu.io/upload_images/2729710-fbb42957dc006ab2.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/300/h/240" class="img-blur" src="//upload-images.jianshu.io/upload_images/2729710-fbb42957dc006ab2.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/150/h/120" alt="120" />
</a>
<div class="content">
<a class="title" target="_blank" href="/p/d20bddb4f8d9">优秀的女人,喜欢坚持这些习惯</a>
<p class="abstract">
题记:要做这样的女子:面若桃花、心深似海、冷暖自知、真诚善良、触觉敏锐、情感丰富、坚忍独立、缱绻决绝。坚持读书、写字、听歌、旅行、上网、摄影,有...
</p>
<div class="meta">
<a class="nickname" target="_blank" href="/u/3b900bbedf35">悦读时刻</a>
<a target="_blank" href="/p/d20bddb4f8d9#comments">
<i class="iconfont ic-list-comments"></i> 39
</a> <span><i class="iconfont ic-list-like"></i> 236</span>
</div>
</div>
</li>
通过观赏上面的源码会发现有很多节点,源码的父节点是li,子节点有很多,我们需要观察的我要获取的内容,是a这个子节点,Beautifulsoup库就是通过网页中的节点来筛选不同的内容。
要使用Beautifulsoup库就得先导入这个库:from bs4 import BeautifulSoup,然后将这个库初始化并选择解析器:
soup = BeautifulSoup(get_html('https://www.jianshu.com/'), 'lxml'),方法BeautifulSoup()中第一个参数是网页源码,第二个参数是使用解析器的类型,此处使用的是lxml解析器。其次通过find_all()方法搜索父节点和子节点:for li in soup.find_all(name='li'),最后要输出文本:print(a.string)。具体实现代码如下:
#初始化BeautifulSoup库,并设置解析器
soup = BeautifulSoup(get_html('https://www.jianshu.com/'), 'lxml')
print(get_html('https://www.jianshu.com/'))
for li in soup.find_all(name='li'): #遍历父节点
for a in li.find_all(name='a'): #遍历子节点
print(a.string) #输出结果
完整代码附上(仅供参考):
import requests
import re
from bs4 import BeautifulSoup
def get_html(url):
headers = {
'User-Agent':'Mozilla/5.0(Macintosh; Intel Mac OS X 10_11_4)\
AppleWebKit/537.36(KHTML, like Gecko) Chrome/52 .0.2743. 116 Safari/537.36'
} #模拟浏览器访问
response = requests.get(url,headers = headers) #请求访问网站
html = response.text #获取网页源码
return html #返回网页源码
soup = BeautifulSoup(get_html('https://www.jianshu.com/'), 'lxml') #初始化BeautifulSoup库,并设置解析器
print(get_html('https://www.jianshu.com/'))
for li in soup.find_all(name='li'): #遍历父节点
for a in li.find_all(name='a'): #遍历子节点
if a.string==None:
pass
else:
print(a.string) #输出结果
Python 3网络爬虫开发实战PDF文件的链接: 链接:https://pan.baidu.com/s/1ARPajjsK--QIAjPGKxbW6Q 提取码:asd6