对于初学者来说,摸索清楚一个领域的知识体系往往比单纯学习某个技术要重要得多,因为技术总会跟随时代发生快速变化,而知识体系往往变化较小,今天我们以自学的角度来了解一下Python爬虫的知识体系吧。
一、python爬虫提取信息的基本步骤:
1,获取数据
2,解析数据
3,提取数据
4,保存数据
二、python爬虫学习框架
1,requests库
requests库主要功能是模拟浏览器发送请求,获取网页数据。最重要的方法就是requests.get()方法,其次还有3个重要属性:response.text(获取网页文本)、response.content(获取二进制内容)、response.encoding(更改网页编码方式)。
2,beautifulsoup库
beautifulsoup库主要功能是解析网页与信息提取。其实我们平时日常工作还是用得比较少,因为不够便捷!你没听错,虽然beautifulsoup库也可以实现大部分网页的信息提取,但是我还是推荐Xpath(需配合谷歌浏览器xpath插件使用),另外还有大名鼎鼎的正则表达式(re),不过使用频率较少。
附上xpath语法及简单案例
import requests,time #载入库
from lxml import etree #载入xpath需要的解析器
for page in range(1,2): #爬取页数
url = f"https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
} #网址及请求头
#f"https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html"与"https://www.fabiaoqing.com/biaoqing/lists/page/{}.html".format(page)用法一致。
r = requests.get(url,headers=headers) #发送网络请求
time.sleep(1) #time库,用来等待1秒,减少网站服务器压力
print(r.status_code) #打印状态码
html = etree.HTML(r.text) #将网页文本放入解析器
results = html.xpath("//div[@class='tagbqppdiv']/a/img") #提取目标网址
for result in results: #遍历序列
tpurl = result.xpath("./@data-original")[0] #提取网址文本
print(tpurl) #打印网址
tp = requests.get(tpurl,headers) #获取图片
with open(tpurl[-10:],"wb") as f: #保存
f.write(tp.content) #保存为二进制内容
f.close() #关闭文件
学会前面两个库和xpath选择器,那么恭喜你,你已经掌握了至少60%的网页爬取方法。
3,异步加载数据的提取(Ajax异步)
比如网易云音乐、QQ音乐等。这里要分两种情况,一种是异步加载,一种是算法加密。异步加载只需要通过浏览器的XHR选项,找到发送请求真正的网址,采用json数据提取方式即可(方法同字典格式);算法加密的数据直接使用selenium库获取,以免掉头发。
4,带参数请求提取翻页数据(处理翻页)
在处理异步加载时,一般都需要处理网址翻页,这个时候就需要多查看几个后面的网址,总结网址翻页的规律,再通过网址参数发送请求即可。
学会前面4步,那么恭喜你,你已经掌握了至少80%的网页爬取方法。
5,cookies与session(处理登录与评论)
有些网站的数据是非公开的,比如淘宝,携程等,需要登录,这时候就需要使用python去模拟登录,当然也可以模拟发送评论信息。
6,selenium库
selenium库是通过指挥浏览器工作,间接获取网页信息,可以无视网页加密和快速处理登录,优势相当明显,大力推荐使用,但需要配置浏览器驱动。
学会前面6步,那么恭喜你,你已经掌握了至少90%的网页爬取方法。
7,gevent库与queue模块(多协程异步和队列)
如果你有大规模的数据需要获取,可以学习使用这两个模块,非专业工作者可以直接跳过。
8,scrapy库
scrapy是一个非常优秀的网络爬虫框架,应该有所耳闻吧!适合于大规模数据的提取,自学者可以尝试一下。
学会前面8步,那么恭喜你,你已经掌握了大规模数据的爬取方法。