爬虫软件架构分析 爬虫的基本框架_python

    对于初学者来说,摸索清楚一个领域的知识体系往往比单纯学习某个技术要重要得多,因为技术总会跟随时代发生快速变化,而知识体系往往变化较小,今天我们以自学的角度来了解一下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),不过使用频率较少。

爬虫软件架构分析 爬虫的基本框架_爬虫_02

附上xpath语法及简单案例

爬虫软件架构分析 爬虫的基本框架_开发语言_03

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步,那么恭喜你,你已经掌握了大规模数据的爬取方法。