1 requests库的深度应用

网页信息采集

import requestsif __name__=="__main__":url=""#将参数封装到字典中kw=input("enter a word:")param:{'query':kw}#UA:User-Agent(请求载体的身份标识)#UA伪装:让爬虫对应的请求载体身份标识伪装成一款浏览器#UA伪装:将对应的User-Agent封装到一个字典中headers:{'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0'}requests.get(url=url,params=param,headers=headers)page_text=requests.textfilename=kw+'html'#保存为文件with open(filename,'w',encoding='utf-8') as fp:fp.write(page_text)print('保存成功!')

重点:

反爬机制:

UA检测:相关的门户网站通过检测请求该网站的载体身份来辨别该请求是否为爬虫程序,如果是,则网站数据请求失败。因为正常用户对网站发起的请求的载体一定是基于某一款浏览器,如果网站检测到某一请求载体身份标识不是基于浏览器的,则让其请求失败。因此,UA检测是我们整个课程中遇到的第二种反爬机制,第一种是robots协议。

反反爬策略:

UA伪装:通过修改/伪装爬虫请求的User-Agent来破解UA检测这种反爬机制。

破解百度翻译

-post请求(携带了参数)

-响应数据是json数据

AJAX

AJAX = Asynchronous JavaScript and XML(AJAX = 异步 JavaScript 和 XML。)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

import requests
import json
if __name__=="__main__":#1.指定urlpost_url='https://fanyi.baidu.com/sug'#2.UA伪装headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0'}#3.post请求参数处理data={'kw':'dog'}#4.发送请求response=requests.post(url=post_url,data=data,headers=headers)#5.获取响应数据dic_obj=response.json()#6.持久化存储fp=open('./dog.json','w',encoding='utf-8')json.dump(dic_obj,fp=fp,ensure_ascii=False)print('over')

方法:

json()
json.dump() 主要用来将python对象写入json文件

数据解析概述

数据解析分类

  • 正则

  • bs4

  • xpath(***)

数据解析原理概述

  • 解析的局部文本内容都会在标签之间或者标签对应的属性中进行存储

  • 1.进行指定标签的定位

  • 2.标签或者标签对应的属性中存储的数据进行提取

正则表达式

图片爬取

import requestsif __name__=="__main__":url="https://doge.zzzmh.cn/wallpaper/origin/b0fced9bf8864e88bb35b437b72f0c14.jpg"#content 返回二进制形式的图片数据# text(字符串)  content(二进制) json() (img_data=requests.get(url=url).contentwith open ('./test.jpg','wb') as fp:fp.write(img_data)

壁纸网站下载壁纸

import requests
import re
import os
if __name__=="__main__":if not os.path.exists('./bizhi'):os.mkdir('./bizhi')url="https://bz.zzzmh.cn/favorite"headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}page_text=requests.get(url=url,headers=headers).text#print(page_text)# use the focus crawler to crawl all wallpapersex='<div class="v-image__image v-image__image--cover" style="background-image: url(&quot;(.*?);); background-position:.*?</div>'image_url=re.findall(ex,page_text,re.S)#print(image_url)for src in image_url:image_data=requests.get(url=src,headers=headers).contentimage_name=src.split('/')[-1]imgpath='./bizhi'+image_namewith open(imgpath,'wb') as fp:fp.write(image_data)print(image_name,"ok!!!!!!")

要点:

使用正则表达式来匹配当前页面下的所有图片

添加分页操作:1.设置通用url 2.利用for循环改变页码的值

bs4进行数据解析

原理:

  • 实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中
  • 通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取

对象的实例化:

  • 将本地的html文档中的数据加载到该对象中
  • 将互联网上获取的页面源码加载到该对象中

基础使用

    使用流程:       - 导包:from bs4 import BeautifulSoup- 使用方式:可以将一个html文档,转化为BeautifulSoup对象,然后通过对象的方法或者属性去查找指定的节点内容(1)转化本地文件:- soup = BeautifulSoup(open('本地文件'), 'lxml')(2)转化网络文件:- soup = BeautifulSoup('字符串类型或者字节类型', 'lxml')(3)打印soup对象显示内容为html文件中的内容基础巩固:(1)根据标签名查找- soup.a   只能找到第一个符合要求的标签(2)获取属性- soup.a.attrs  获取a所有的属性和属性值,返回一个字典- soup.a.attrs['href']   获取href属性- soup.a['href']   也可简写为这种形式(3)获取内容- soup.a.string- soup.a.text- soup.a.get_text()【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容(4)find:找到第一个符合要求的标签- soup.find('a')  找到第一个符合要求的- soup.find('a', title="xxx")- soup.find('a', alt="xxx")- soup.find('a', class_="xxx")- soup.find('a', id="xxx")(5)find_all:找到所有符合要求的标签- soup.find_all('a')- soup.find_all(['a','b']) 找到所有的a和b标签- soup.find_all('a', limit=2)  限制前两个(6)根据选择器选择指定的内容select:soup.select('#feng')- 常见的选择器:标签选择器(a)、类选择器(.)、id选择器(#)、层级选择器- 层级选择器:div .dudu #lala .meme .xixi  下面好多级div > p > a > .lala          只能是下面一级【注意】select选择器返回永远是列表,需要通过下标提取指定的对象

实战

    #!/usr/bin/env python# -*- coding:utf-8 -*-import requestsfrom bs4 import BeautifulSoupheaders={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',}def parse_content(url):#获取标题正文页数据page_text = requests.get(url,headers=headers).textsoup = BeautifulSoup(page_text,'lxml')#解析获得标签ele = soup.find('div',class_='chapter_content')content = ele.text #获取标签中的数据值return contentif __name__ == "__main__":url = 'http://www.shicimingju.com/book/sanguoyanyi.html'reponse = requests.get(url=url,headers=headers)page_text = reponse.text#创建soup对象soup = BeautifulSoup(page_text,'lxml')#解析数据a_eles = soup.select('.book-mulu > ul > li > a')print(a_eles)cap = 1for ele in a_eles:print('开始下载第%d章节'%cap)cap+=1title = ele.stringcontent_url = 'http://www.shicimingju.com'+ele['href']content = parse_content(content_url)with open('./sanguo.txt','w') as fp:fp.write(title+":"+content+'\n\n\n\n\n')print('结束下载第%d章节'%cap)

Xpath

最常用且最高效便捷的一种解析方式。通用性。

xpath解析原理

  • 实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。
  • 调用etree对象中的xpath方法结合xpath表达式实现标签的定位和内容的捕获。

如何实例化一个etree对象

  • 本地

    • etree.parse(filePath)
  • 网络

    • etree.HTML(‘page_text’)
  • xpath(‘xpath表达式’)

xpath的表达式

层级定位:#找到class属性值为song的标签//div[@class="song"]
层级&索引定位:#找到class属性值为tang的div的直系子标签ul下的第二个子标签li下的直系子标签a//div[@class="tang"]/ul/li[2]/a
逻辑运算:#找到href属性值为空且class属性值为du的a标签//a[@href="" and @class="du"]
模糊匹配://div[contains(@class,"ng")]//div[starts-with(@class,"ta")]
取文本:# /表示获取某个标签下的文本内容# //表示获取某个标签下的文本内容和所有子标签下的文本内容//div[@class="song"]/p[1]/text()//div[@class="tang"]//text()
取属性://div[@class="tang"]//li[2]/a/@href

图片解析

    import requestsfrom lxml import etree url = 'http://pic.netbian.com/4kmeinv/'headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}response = requests.get(url=url,headers=headers)#获取页面原始编码格式print(response.encoding)page_text = response.texttree = etree.HTML(page_text)li_list = tree.xpath('//div[@class="slist"]/ul/li')for li in li_list:img_url = 'http://pic.netbian.com'+li.xpath('./a/img/@src')[0]img_name = li.xpath('./a/img/@alt')[0]img_name = img_name.encode('iso-8859-1').decode('gbk')print(img_url,img_name)

python爬虫—数据解析相关推荐

  1. python爬虫数据解析总结

    python爬虫数据解析总结 目录 python爬虫数据解析总结 1.概述 2.Xpath解析html数据 2.1.基本语法 1.查询语法 2.2.Xpath解析html数据 1.安装lxml库 2. ...

  2. python爬虫数据解析xpath解析详细讲解——附有详细案例

    案例③由于时间流逝,网页爬取失效了 最近考研复试,增加一个案例,爬取985211学校,并以excel表格形式存储 文章目录 1.什么是xpath 是最常用的最广泛的数据解析方式 2.xpath解析原理 ...

  3. python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析

    标签:pattern   div   mat   txt   保存   关于   json   result   with open 关于正则表达式的更多用法,可参考链接:https://blog.c ...

  4. python层级抓取_070.Python聚焦爬虫数据解析

    一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...

  5. python爬虫正则表达式实例-python爬虫 正则表达式解析

    这篇文章主要介绍了python爬虫 正则表达式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 - re.I # 忽略大小写 - re.M # 多 ...

  6. 硬核来袭!!!一篇文章教你入门Python爬虫网页解析神器——BeautifulSoup详细讲解

    文章目录 一.BeautifulSoup介绍 二.安装 三.bs4数据解析的原理 四.bs4 常用的方法和属性 1.BeautifulSoup构建 1.1 通过字符串构建 1.2 从文件加载 2.Be ...

  7. 爬虫数据解析的三方式

    2.爬虫数据解析的三方式 一.正则表达式解析 常用正则表达式回顾: 单字符:. : 除换行以外所有字符[] :[aoe] [a-w] 匹配集合中任意一个字符\d :数字 [0-9]\D : 非数字\w ...

  8. python 爬虫 数据抓取的三种方式

    python 爬虫   数据抓取的三种方式 常用抽取网页数据的方式有三种:正则表达式.Beautiful Soup.lxml 1.正则表达式 正则表达式有个很大的缺点是难以构造.可读性差.不易适用未来 ...

  9. Python 爬虫数据写入csv文件中文乱码解决以及天眼查爬虫数据写入csv

    python爬虫数据写入csv文件中文乱码,用'utf-8'在pycharm中打开文件没有问题,但是用excel打开却出现了问题,以下为解决方法. (最近在练习爬虫,这个博文是对自己学习的记录和分享, ...

最新文章

  1. Java Timer 定时器的使用
  2. 100M独享带宽香港服务器有多快
  3. MySQL查询日志总结
  4. 你对Java网络编程了解的如何?Java BIO 网络编程 | Netty 前期知识
  5. QT的QLinkedList类的使用
  6. 闲谈“个人核心竞争力”与“危机感” !!!
  7. Linux ss命令 报错,ECS Linux中ss命令显示连接状态的使用说明
  8. 云服务器文件传输问题
  9. Python中字符串格式化输出的学习笔记
  10. mariadb重置自动id_如何更改/重置MySQL或MariaDB根密码
  11. Python中zip函数
  12. SQL Bulk Insert
  13. python 判定n阶方矩是否为上三角矩阵
  14. PCB设计流程图 思路清晰远比卖力苦干重要
  15. 吉他效果器插件-IK Multimedia AmpliTube 5 MAX 5.0.3 macOS
  16. kendoUI模板概述(template)
  17. MIME类型 swfupload 及 php
  18. 用c语言编写kcl方程,求助各位大手子 求了好多次都不对 用kvl kcl求出电容c
  19. oracle spatial sdo_util,Oracle spatial抽稀函数(SDO_UTIL.SIMPLIFY)详解
  20. 2、AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线

热门文章

  1. html中的元素 英文,HTML 常用标签元素属性名英文书写
  2. Docker搭建Kafka集群
  3. 从短信到纸飞机:数据图形化的有趣例子
  4. Linux命令查找文件夹下包含某个字符串的所有文件
  5. 如何做小程序页面设计模板?
  6. PostgreSql数据库字段小写问题
  7. super关键字的作用
  8. 在Windows Server 2016中部署RemoteApp
  9. remote1 Android,Kamoer RemoteAPP
  10. jQuery无法获取隐藏元素(display:none)宽度(width)和高度(height)的新解决方案