- 检查ip的可用性
1.可以使用requests添加超市参数,判断IP质量
2.在线代理ip质量检测的网站
-
携带cookie请求
-
cookie和session的区别
1.cookie数据存放在客户的浏览器上,session数据放在服务器上
2.cookie不是很安全,别人可以分析放在本地的cookie进行cookie欺骗
3.session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器性能
4.单个cookie数据不能超过4k,很多浏览器限制一个站点最多保存20个cookie
-
携带一堆cook进行请求,组成cookie池。。。如上
-
携带cookie、session的好处:能够请求到登录之后的界面
-
携带cookie、session的弊端:一套cookie和session往往和一定用户对应,请求太快,次数太多,容易被识别为爬虫
-
为了获取登录后的页面,必须发送带有cookie的请求
-
使用request提供的session类来请求登录之后的网站思路
1.实例化session
2.先试用session发送请求,登录网站,把cookie保存在session中
3.再使用session请求登陆之后才能访问的网站,session能够自动的携带登陆成功时保存在其中的 cookie,进行访问
- 模拟登录获取登录后的页面三种方法
#使用session发送post请求,cookie保存在其中
session.post(post_url,data=post_data,headers=headers)
#再使用session进行请求登录后才能访问的地址
r = session.get(‘http://www.renren.com/976812720/newsfeed/photo’,headers=headers)
headers = {
‘User-Agent’:‘…’,
‘Cookie’:‘…network中的cookie值’
}
- 哪些情况可以这样?
1.cookie过期时间很长的网站
2.在cookie过期之前能够拿到所有数据,比较麻烦
3.配合其他程序一起使用,其他程序专门获取cookie,当前程序专门请求页面
cookies = ‘…network中的cookie’
#字典推导式
cookies = {i.split(“=”)[0]:i.split(“=”)[1] for i in cookies.split("; ")}
r=session.get(‘http://www.renren.com/976812720/newsfeed/photo’,headers=headers,cookies=cookies)
3、Chrome分析post和json
-
寻找登录post的地址
-
第一种:在from表单中寻找action对应的url地址
-
post的数据是input标签中的name的值作为键,真正的用户密码作为值的字典,post的url地址就是action对应的地址
-
第二种:抓包,寻找登录的url地址
1.勾选network中的perserver log按钮,防止页面跳转找不到url地址
2.寻找post数据,确定参数(多登录几次)
-
参数不会变,直接用,比如密码不是动态加密的时候
-
参数会变
-
在当前响应中
-
通过js生成
-
定位想要的js
-
选择会触发的js时间的按钮,点击ELememns中的event listener,找到js位置
-
通过Chrome中的search 来搜索url中关键字
-
添加断点的方式来查看js操作,通过Python来进行同样操作
4、数据分类
-
非结构化的数据:html等
-
处理方法:正则表达式、xpath
-
结构化数据:json,xml等
-
处理方法:转化为python数据类型
5、json数据处理
-
json注意点
-
json是一种轻量级的数据交换式,适用于数据交互情景
-
哪里能找到json的url
1.使用Chrome切换到手机页面
2.抓包手机app的软件
-
json中字符串都是用双引号引起来的
-
如果不是双引号
-
eval:能实现简单的字符串和简单的Python类型的转化
-
replace:把单引号替换为双引号
-
往一个文件中写入多个json串,不再是一个json串,不能直接读取(写保存在本地找对应行的问题)
-
一行写一个json串,按行来读取
-
json字符串<—>Python数据类型
ret1 = json.loads(html_str)
或者
with open(‘douban.json’,‘r’,encoding=‘utf-8’) as f:
ret2 = f.read() (需要先读一下)
ret3 = json.loads(ret2)
print(ret3)
with open(‘douban.json’,‘w’,encoding=‘utf-8’) as f:
f.write(json.dumps(ret1,ensure_ascii=False,indent=2))
(ensure_ascii=False在json中文显示中文,indent=2缩进两格,显示好看)
-
包含json的类文件对象<—>python
-
类文件对象:具有read()或者write()方法的对象 (f = open(‘a.txt’,‘r’))f就是类文件对象
with open(‘douban.json’,‘r’,encoding=‘utf-8’) as f:
ret4 = json.load(f) (直接转换)
print(ret4)
with open(‘douban.json’,‘w’,encoding=‘utf-8’) as f:
json.dump(ret,f)
6、正则表达式(匹配列表)
-
定义:用事先定义好特殊字符,组成“规则字符串”,表达对字符串的一种过滤逻辑
-
用途:较少的数据时使用正则,如一个价格
-
常用正则表达式的方法:
re.complie(编译)
re.match(从头找一个)
re.search(找一个)
re.findall(找所有)
re.sub(替换)
- 贪婪(.*):尽可能匹配多的字符
r = re.findall(‘<.+>’,a,re.S) (从第一个<匹配到最后一个)
print®
- 非贪婪(.*?):尽可能少的数据,匹配完一个接着匹配下一个
r = re.findall(‘<.+?>’,a,re.S) (从第一个<匹配到第二个,接着匹配下个)
print®
- re .sub(替换)方法
a = 'chuan1zhi2 ’
print(re.sub(‘\d’,‘_’,a))
- re.complie(编译)方法
a = 'chuan1zhi2 ’
p = re.compile(‘.’,re.S) (编译后p可以调用re其他方法节省运行时间,如果有re.S,re.DOALL放这)
print(p.findall(‘\n’))
- 原始字符串r的用法:待匹配的字符串中看到什么就在正则表达式中写什么,能忽略\带有转译的影响
a = re.findall(r’a\nb’,‘a\nb’)
print(a)
r’a\nb’ == ‘a\nb’ (True)
f = open(r"C:\Users\1.txt",“r”) (如果没有r需要写\)
- ()的使用:只匹配括号中的,括号前后定位和起过滤作用
re.findall(r’a(.*)bc’,‘a\nbc’,re.DOTALL)
输出:[‘\n’]
- 双引号里有双引号加\
r"<h1 class=“title”>.?
(.?)
" (提取h1=title里面p标签的所有数据)7、Xpath
-
lxml是一款高性能的Python HTML/XML解析器,我们可以利用Xpath来快速定位特定元素以及获取节点信息。XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
-
工具:
1.Chrome插件 Xpath Helper
2.开源的Xpath表达式编辑工具:XML Quire(xml格式文件可用)
3.Firefox插件 Xpath Checker
- 节点选择语法
![在这里插入图片描述]( ) 获取a下的文本
-
a//text() 获取a下的所有标签的文本
-
//a[text()=‘下一页 >’] 选择文本为下一页三个字的a标签
-
@符号
-
a@href
-
//ul[@id=‘tetail_list’] (帮助定位)
-
//a/@href 获取a标签中href的url
-
//符号
-
在Xpath开始的时候表示从当前html中任意位置开始选择
-
li//a :表示li下任何一个a标签
-
xpath的包含关系
-
//div[contains(@class,‘i’)] class包含i的div
8、lxml
-
lxml 可以接收bytes和str的字符串
-
利用etree.HTML,将字符串转化为Element对象
html = etree.HTML(text)
- Element对象具有xpath的方法
html.xpath(’’)
-
lxml可以自动修正和补全html代码,可能会改错需要查看下
-
etree.tostring(html) 可以查看element对象中所包含的字符串,根据修正后的HTML写Xpath
-
提取页面数据的思路
ret3 = html.xpath(“//li[@class=‘item-1’]”)
for i in ret3:
item = {}
item[‘title’] = i.xpath(“./a/text()”)[0] if len(i.xpath(“./a/text()”)) > 0 else None
item[‘href’] = i.xpath(“./a/@href”)[0] if len(i.xpath(“./a/@href”)) > 0 else None
print(item)
1、scrapy框架环境搭建
- 第一步:安装Twisted模块
(1)打开(https://www.lfd.uci.edu/~gohlke/pythonlibs/),按下快捷键<Ctrl+F>搜 索"twisted"模块下载对应版本
(2)python3.9就下载“Twisted-20.3.0-cp39-cp39-win_amd64.whl”
(3)以管理身份运行命令提示符窗口,cd进入“Twisted-20.3.0-cp39-cp39-win_amd64.whl”文件所在位置,然后输入“pip install Twisted-20.3.0-cp39-cp39-win_amd64.whl”
-
第二步cmd窗口:安装scrapy框架:pip install Scrapy -i https://pypi.douban.com/simple/
-
第三步cmd窗口:安装pywin32:pip install pywin32 -i https://pypi.douban.com/simple/
2、scrapy框架创建项目
-
第一步:创建一个文件命名为Scrapy
-
第二步:创建scrapy框架之前,首先要确保把框架创建在我们刚刚新建的文件夹Scrapy中:
(1)打开管理员命令行窗口:输入cd 后面跟一个空格 然后把你新建的Scrapy文件路径位置复制进终端里
(2)输入“scrapy startproject scrapyDemo” 可创建名称“scrapyDemo”的项目
(3)cd scrpayDemo
(4)生成一个爬虫scrapy genspider itcast “itcast.cn” ,其中“itcast”是定义的爬虫名称,“itcast.cn”是限制只能在这个网段中爬取不会跑到其他网址
- 第三步:修改配置:这里我们要改一下settings.py里的内容:
(1)打开文件,找到代码的第22行,把 ROBOTSTXT_OBEY=True 改为 False,这行代码表示是否遵循爬虫协议,如果是Ture的可能有些内容无法爬取
(2)将第67到69行代码解注释,并把300改为1,这是优先级设置
- 第四步:运行爬虫
使用pycharm时,在底部Terminal窗口中输入“scrapy crawl quotes”,“quotes”为自己定义的爬虫名
3、scrapy框架使用介绍
-
框架中个文件的作用
-
items.py:定义爬虫程序的数据模型
-
middlewares.py:定义数据模型中的中间件
-
pipelines.py:管道文件,负责对爬虫返回数据的处理
-
settings.py:爬虫程序设置,主要是一些优先级设置,优先级越高,值越小
-
scrapy.cfg:内容为scrapy的基础配置
未更完…
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
外链图片转存中…(img-Ie9OOJJQ-1712534364323)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
![img](https://i-blog.csdnimg.cn/blog_migrate/b2b8f8fbfac60cf5ca677d9591c0d236.jpeg)