引言
python基础学习就先告一段落,现在登场的是爬虫学习,其实我已经学这东西已经一个星期了,但是由于生病啊,看奥运啊一堆不是很重要的事给耽误了,今天才想起来做这个笔记,其实还有一个多线程的python笔记没做,但是不急,现在用不到,到时候在学一遍。今天主要学的是urlib库和requests库。那么好,今天的笔记正式开始!现在是北京时间21点32,看这样子我说实话我还可再学bs4了。
1.什么是爬虫?
爬虫是爬取网页端的数据,对该数据进行分析,查重,对于数据分析来说有很大帮助。
但是最重要的一点,有些数据不能爬!!!!!!!!!!!!!!!!!
1.网页端.robots.txt标识下的链接不能爬
2.付费版权资源不能爬
3.隐私资源不能爬
虽然是正儿八经的工作,但是始终不能触碰法律的红线,当然还有很多不能爬的,不止我说的这些
2.爬虫流程
首先拿到需要爬取的网页连接,通过urlib库拿到一个对象,通过对象调用方法去拿到真个页面的源代码,至此爬虫过程结束。
当然可能会出现乱码状况,需要修改一下他的编码格式,pycharm默认编码格式是utf-8
3.第一个爬虫程序
#导入解析网址的函数
from urllib.request import urlopen
#解析网址,拿到响应结果,得到一个响应对象
response = urlopen('http://www.baidu.com')
#读取到响应对象里的数据
result = response.read()
print(result)
结果:
4.简易反反爬
相对于爬虫来说,如果多次访问,会导致网站的承受能力降低,所以很多网站是不让你去爬的,所以指定了很多反爬策略,检测你是不是爬虫,今天学习一个简易案例,搜狗浏览器的搜索引擎。
import requests
query = input("请输入要查询的内容:")
url = f'https://www.sogou.com/web?query={query}'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
}
response = requests.get(url,headers= headers)
print(response.text)
在这里在请求头上家了ua,告诉浏览器我是用这个设备进行操作的,不是机器操作的。
5.post请求
在爬虫进行模拟浏览器请求的时候,常见的会有两种请求方式,一个post请求,一个是get请求。
这个学过前端就不过多讲述,主要看怎么找东西。
当输入一个a以后,会出现很多连接词,这是一个监听事件,监听输入框里面的数据,发现里面数据有改动就会发送请求,得到相关词,并用下拉的方式呈现出来,此时他发送的请求就是post请求,让我们看一下他的请求头。并拿到他的参数。
那么好,代码如下:
import requests
url = 'https://fanyi.baidu.com/sug'
s = input("请输入要翻译的内容:")
dat = {
"kw":s
}
response = requests.post(url,data=dat)
print(response.json())
6.get请求
这个是最常用的请求。找的方法和post类似,主要说一下参数吧。用抓包工具打开刚刚的页面。
这个可能和我的代码有出入,因为我找不到那个页面了
代码如下:
# -*-coding:Utf-8 -*-
# time: 2024/7/29 下午11:21
# file: demo4.py
# author: 狗岁
import requests
start = input('请输入起始页码:')
url = 'https://movie.douban.com/j/chart/top_list'
param = {
'type': '24',
'interval_id': '100:90',
'action':'',
'start': start,
'limit': '20'
}
header = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0',
# 'accept-encoding':'gzip, deflate, br, zstd'
}
response = requests.get(url,params=param,headers= header)
print(response.json())
print(response.request.headers)
7.数据解析
数据解析:对于爬虫爬取数据进行筛选
三种方式:
1.re正则表达式 常用,执行快
2.bs4解析 简单,但是执行慢
3.xpath解析
这三种可以混合使用,完全以为结果为向导,等完成以后,再考虑性能问题
8.正则表达式解析
'''
re解析 :正则表达式
'''
import re
# result = re.findall(r'[a-z]+', 'runoob,google,taobao')
# print(result)
s = '''
<div class= 'Goku'><span id='1'>孙悟空</span></div>
<div class= 'two'><span id='2'>贝吉塔</span></div>
<div class= 'TlKs'><span id='3'>特兰克斯</span></div>
<div class= 'GoFAN'><span id='4'>孙悟饭</span></div>
<div class= 'GoTIAN'><span id='5'>孙悟天</span></div>
'''
#
# obj = re.compile(r"<div class='.*?'><span id='\d+'>(.*?)</span></div>",re.S)
#
# result = obj.finditer(s)
result = re.finditer(r"<div class= '.*?'><span id='(?P<str>\d+)'>(.*?)</span></div>",s,re.S)
# result= re.finditer(r"<div class=",s)
print(result)
for it in result:
print(it.group(2))
结语
那么好,今天的故事会……,今天的文章到此结束,现在是北京时间22点10分,我就说还可以学习嘛。今天是爬虫小白,梦想是做月入过万的男人!mai起!