专栏/Python超强爬虫8天速成(完整版)爬取各种网站数据实战案例

Python超强爬虫8天速成(完整版)爬取各种网站数据实战案例

2022年11月19日 15:36--浏览 · --点赞 · --评论
宅人中介
粉丝:649文章:38

Day1

爬虫:通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程

爬虫带来的风险体现在如下两方面:

1、干扰被访网站的正常运营

2、抓取了受法律保护的特定类型数据或信息

所以:

  1. 时常优化自己的程序,避免干扰被访问网站的正常运行
  2. 在使用、传播爬取到的数据时,审查抓取到的内容,如果发现涉及到用户、商业机密等敏感内容时需要及时停止爬取或传播


http协议:服务器和客户端进行数据交互的一种形式


常用请求头信息:

  • User-Agent:请求载体的身份标识
  • Connection:请求完毕后,是断开还是保持连接


常用响应头信息:

Content-Type:服务器响应回客户端的数据类型


https协议:安全的http(超文本传输)协议,涉及到数据加密


加密方式:

1、对称密钥加密(钥匙和锁一块发给服务器,但不妨拦截)

2、非对称密钥加密(只有密文而没有密钥被传输,私钥一直没动,但不妨公钥被篡改)

3、整数密钥加密(数字签名防伪,已做数字签名的公钥由客户端发给服务器)


Day2

requests模块:

  • urlib模块
  • requests模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高【作用:模拟浏览器发请求】

如何使用:

  1. 指定url
  2. 发起请求
  3. 获取响应数据
  4. 持久化存储

环境安装:

pip install requests


实战编码:

简易网页采集器

UA检测(User-Agent请求载体的身份标识):门户网站的服务器会检测对应请求的载体身份标识,如果检测请求载体身份标识为某一款浏览器,说明该请求正常。但是,如果检测到请求载体身份标识不是基于某一款浏览器的,则表示该请求为不正常请求(爬虫),服务器端很有可能拒绝该次请求。

UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器。



破解百度翻译

F12-Network-XHR(Ajax请求,局部刷新)

细节:先打开检查,再输入dog!!

需求:破解百度翻译

  • post请求(携带了参数)
  • 响应数据(content-type):是一组 json 数据↓

获取响应数据方法:dic_obj = response.json()

注意:中文不能使用asc码进行编码

实测代码时会出现结果返空的情况


豆瓣电影

页面地址:https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&type=24&interval_id=100:90&action=

滚轮拖到底,页面局部更新

发送Get请求,拿到json型响应数据

代码:

检验后,start从0开始(修正)

用json格式化工具更好显示


作业

http://www.kfc.com.cn/kfccda/index.aspx

注:点击查询按钮后,地址栏没有改变,说明确实为Ajax请求(局部刷新)


综合练习之药监总局

http://scxk.nmpa.gov.cn:81/xk/

https://www.bejson.com/json/format/(在线JSON校验格式化工具,将response复制进去)

在首页中对应的企业信息数据是通过ajax动态请求到的(详情页↓)

http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=da107d9a2a33484ba40dbd4d4fce7353只有id的值在变动

http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=9f000a93669640018452b54350c36a0f

通过对详情页url观察:

  • url的域名都是一样的,只有携带的参数(id)不一样
  • id值可以从首页对应的ajax请求到的json串中获取;
  • 域名和id值拼接出一个完整企业对应的详情页url

Ctrl+F搜索(0条结果),可知详情页企业的数据也是动态加载的,即无法直接通过url发请求

ctrl+shift+L 可以将代码规范化


Day2 - 7.3.综合练习之药监总局03 P13 - 11:08


2022 url动态加密了,反反爬需自行考虑

分页操作(详情页不需要加入循环)


Day3

数据解析概述

聚焦爬虫:爬取页面中指定的内容

数据解析分类

  1. 正则
  2. bs4
  3. xpath(***)

数据解析原理概述

  • 解析的局部文本内容都会在标签之间或标签对应的属性中进行存储
  1. 进行指定标签的定位
  2. 标签或者标签对应的属性中存储的数据值进行提取(解析)

图片爬取

requests.get().content 返回二进制数据

正则解析

糗事百科网页版已经无了。。听听思路

逐个排查,找到图片对应标签

正则提取图片地址

.*? 就是正则表达式中用来匹配一切字符的

(.*? 表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复)

re.M 单行匹配

re.S 多行匹配

注意导入os模块(import os),创建文件夹以保存所有图片

if not os.path.exists('./qiutuLibs'):

os.mkdir('./qiutuLibs)


Day3 - 4.正则解析案例02 P19 - 03:06


处理分页:

page=1 url='com/%d/com' url_new=format(url%page)

print(url_new) ##可得:com/1/com

(即format 能够把pageNumber的值赋给URL里面的%d)


BS4解析

python独有的解析方式

bs4进行数据解析时,会应用到lxml解析器

将本地html文档中的数据加载到该对象中

将互联网获取的页面源码加载到对象中

提供用于数据解析的方法和属性:

层级选择器

‘>’ 表示一个层级;

‘ ’ 空格表多个层级;

测试:

小结:

实战:

网址:http://www.shicimingju.com/book/sanguoyanyi.html

(这个网站今天看已经是混乱的了,章节乱串,而且文本是直接放在div里面没有p标签 2021/8/4)


这里的page_text后面加上.text(改成content效果更好)

注:这个网站有问题,链接进去以后会跳到其他书籍,网页浏览也会跳。所以主要学思路(2022.9月 实测代码有效)


xpath解析

新版本不能直接调用 etree

需要这样 from lxml import html

etree=html.etree

解析错误的话,在meta的最后补斜杆,<meta charset="UTF-8"/>

运行结果里的那个值只是表示内存地址,跟这个地址里存储额数据无关

属性定位

xpath下标从1开始的(文本获取)

杜牧(从[‘杜牧’]列表里取出元素)

度蜜月(注意第二个并不在li的直系标签内)

取链接(属性要加@,标签不用加)

小结:

xpath和正则一样,相较于python独有的的bs4解析更具有通用性。

xpath不仅通用,理解和书写上也便捷高效

实战—58二手房

“./” 当前标签


这里如果结果为空,可去原网页刷新一下,会有“访问次数太多,要求验证”的提示,完成验证后,即可成功爬取。

4K图片解析下载

http://pic.netbian.com/4kmeinv/



全国城市名字爬取

https://www.aqistudy.cn/historydata/

原始版

改良版(‘或’运算)

作业:

爬取站长素材中免费简历模板

https://sc.chinaz.com/


Day 4

验证码识别

www.yundama/demo.html(2022用不了了,可以试试“超级鹰”)


实战:古诗文网验证码识别

https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx

利用开发者工具能节省时间



Day4 - 3.古诗文网验证码识别 P31 - 09:14


超级鹰实测可用.2022


Day5

模拟登录实现流程梳理

https://www.renren.com

2022.人人网只有登录选项,无验证码,故继续使用古诗文网进行练习


#此处要用session请求验证码地址保存cookies后,输入验证码后才不会报错


模拟登录cookie操作

http/https协议特性:无状态

把cookie携带上(让服务器明白这是基于登录状态发起的请求)

  1. 手动处理:通过抓包工具获取cookie值,将该值封装到headers中(不推荐,麻烦而难以应对动态的cookie)
  2. 自动处理session会话对象

作用:进行请求的发送

如果请求过程中产生了cookie,则该cookie会被自动存储/携带在该session对象中

cookie值来源:

模拟登录post请求后,由服务器端创建而成

1.创建一个session对象:

session = requests.Session( )

2.使用session对象进行模拟登录post请求的发送(cookie就会被存储在session中)

3.session对象对个人主页对应的get请求进行发送(携带cookie)


关于代理

应用:(未使用代理ip↓)

https://www.baidu.com/s?wd=ip

代理ip的类型:

http:应用到http协议对应的url中

https:应用到https协议对应的url中

代理ip的匿名度:

透明:服务器知道该次请求使用了代理,也知道请求对应的真实ip

匿名:知道使用了代理,但不知道真实ip

高匿:不知使用了代理,更不知道真实ip

requests.get中的proxies参数


Day6 异步爬虫

目的:在爬虫中使用异步实现高性能的数据爬取操作

单线程爬取的数据效率较低(等待阻塞操作完成后才进行下一步),故使用异步爬虫解决此类问题。

线程池的基本使用:

线程池案例应用:

原则:线程池处理的是阻塞且耗时的操作


注意:当前页面的所有数据,并不一定是通过链接请求得到的,有的数据可能是动态加载出来的

在response下搜索‘<video’,无返回结果,即当前页面的video数据一定是动态加载出的

2022 似乎又变回了ajax请求,videostatus中返回的json数据

弹幕:拿不到Jason数据的是因为有referer防盗链技术,同时最终得到的Jason里的是假url,要利用假url自己拼接一个真url

协程相关

弹幕:event_loop 就好比一个无限旋转的圆圈,协程对象就是连接event_loop和你要干的具体事情的中间人

注:记得先跟着把flask.py写了



Day7 selenium

简介

如何获取动态加载的数据↓


Day7 - 01.selenium简介 P49 - 04:06




Day7 - 01.selenium简介 P49 - 10:08


初试

下载浏览器驱动程序

http://chromedriver.storage.googleapis.com/index.html(驱动程序一定要与当前的浏览器版本一一匹配)

查看驱动和浏览器版本的映射关系

http://blog.csdn.net/huilan_same/article/details/51896672

对应即可(64位直接往下载网页的下面看就可以了,不需要找映射)

示例:http://scxk.nmpa.gov.cn:81/xk/



selenium其他自动化操作

现在用(弹幕提示)find_element(by=By.id,value="q").send_keys('避孕套')


Day7 - 03.selenium其他自动化操作 P51 - 08:38


window.scrollTo(0,document.body.scrollHeight) 注:向二维方向各自移动的像素距离

小结:

iframe处理+动作链

https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

如果定位的标签是存在于iframe标签之中,则必须通过如下操作...↓(自嵌套内的定位)


小结:


模拟登录

https://qzone.qq.com


无头浏览器+规避检测

12306模拟登录

https://kyfw.12306.cn/otn/login/init

基于当前所显示页面的验证码图片进行,刷新后会导致验证图片发生变化。

1、使用selenium打开登录页面

2、对当前selenium打开的这张页面进行截图

3、对当前图片局部区域(验证码图片)进行裁剪(好处:将验证码图片和模拟登录一一对应)

4、使用超级鹰识别验证码图片(坐标)


Day7 - 08.12306模拟登录01 P56 - 08:21


利用save_screenshot将当前页面截图保存

通过验证码图片对应的↖和↘坐标确定裁剪区

12306那个很多同学截取验证码位置不对,原因是电脑的显示设置的问题,打开显示设置,将缩放与布局改成100%即可

需要先调整到全屏,然后点击账号登录,才能正常保存图片

将验证码提交给超级鹰识别即可

from selenium.webdriver import ActionChains 动作链模块

有一个“ | ” ,点两次(以此类推)


Day7 - 09.12306模拟登录02 P57 - 03:22


注意:点击对应的是当前打开的整张页面,而不仅仅只是验证码图片,因此需要修改参照物的作用域

录入用户名和密码


Day8

scrapy框架简介

集成多种功能、通用性强

关于环境安装:

在pycharm里面可以直接下Twisted、scrapy等(2022)

基本使用


scrapy数据解析操作

在scrapy中进行UA伪装,将之粘贴到settings文件对应位置

注意返回对象,和etree方法返回的略有不同

scrapy持久化存储

1、基于终端指令

2、基于管道

通用性更强,只是流程会略微繁琐


基于spider的全站数据爬取

将网站中某板块下的全部页码对应的页码数据进行爬取解析

案例:爬取校花网中的照片名称(该网站现在打不开)


Day8 - 8.全站数据爬取 P65 - 03:59


五大核心组件

请求传参

使用场景:爬取的数据不在同一张页面

https://www.zhipin.com/web/geek/job?query=python&city=101010100


Day8 - 10.请求传参01 P67 - 09:34


tips:

  • 岗位描述返回的是列表,因此需要用join来整合拼接成字符串(这里是定义了一个parse_detail去详情页里面获取)
setting文件中加入USER_AGENT 和 改ROBOTSTXT_OBEY = False
LOG_LEVEL = 'ERROR'
  • 在boss.py中导入"from bosspro.items import BossproItem"。请求传参实际上传的是item类型的对象(meta)


Day8 - 10.请求传参01 P67 - 17:38


将parse中的item传给parse_detail

开启管道:


Day8 - 11.请求传参02 P68 - 01:03



Day9

scrapy图片爬取

https://sc.chinaz.com/tupian/

#一般设计图片的网站都会进行懒加载 所以这里的图片地址为src2


Day9 - 1.scrapy图片爬取01 P69 - 14:29


如果不能下载图片到指定目录,是因为没安装Pillow模块


关于中间件

下载中间件:批量拦截scrapy中发起的请求与响应;


中间件-处理请求


Day9 - 4.中间件-处理请求 P72 - 01:52



网易新闻


Day9 - 7.网易新闻03 P75 - 05:26


弹幕:获取五大板块的详情页面2022年通过xpath确实无论如何都获取不了,但是可以通过re正则去获取,这样就不需要你去修改中间件和自动化测试了。当然这样无助于你学习中间件,所以我把这条内容放在最后打出


CrawlSpider全站数据爬取

链接提取器被作用在规则解析器

现在的链接都是动态加载的(2022)

注意:xpath表达式中不可以出现tbody标签


Day9 - 11.CrawlSpider的全站数据爬取03 P79 - 11:36



分布式爬虫

感觉很适合团伙作战哈哈哈(调度器共享、管道共享)

settings中:

下载与操作系统匹配的redis


Day9 - 13.分布式搭建 P81 - 27:20


爬取到的数据存储在了redis的proName:items这个数据结构中

增量式爬虫


投诉或建议

玻璃钢生产厂家深圳特色商场美陈订购置办玻璃钢动物雕塑江苏季节性商场美陈供应商濮阳玻璃钢雕塑制作厂家玻璃钢雕塑喷漆品牌夏季商场美陈怎么布置重庆玻璃钢熊雕塑衢州玻璃钢人物雕塑厂家供应玻璃钢造型雕塑服务商深圳装饰商场美陈研发小品玻璃钢动物雕塑规格淮南玻璃钢雕塑销售电话延安玻璃钢雕塑批发泉州玻璃钢雕塑制作厂家玻璃钢抽象雕塑定做厂家玻璃钢电镀雕塑广东透光玻璃钢雕塑供应商孟津玻璃钢雕塑价格卡通人物玻璃钢雕塑定做玻璃钢雕塑如何制作视频广东室内商场美陈现价玻璃钢仿石雕塑图片河南玻璃钢佛像雕塑定做滁州春季商场美陈福州特色玻璃钢雕塑订做价格玻璃钢丙烯仿石雕塑自贡玻璃钢头像雕塑顺义玻璃钢雕塑工程西宁公园玻璃钢雕塑公司烟台潮州玻璃钢动物雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化