requests 模块
获取数据方式
静态页面
import requests
response=requests.get(url="https://www.baidu.com")
print(response.text)
动态加载数据
豆瓣动画电影排行榜
import requests
import json
url='https://movie.douban.com/j/chart/top_list'
params={'type':25,'interval_id':'100:90','action':'','start':0,'limit':169}
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.81'}
response=requests.get(url=url,params=params,headers=headers)
content=response.json()
tot=0
for s in content:
print(s['title'],s['score'])
tot+=1
if tot==5:
break
图片
百度图片
import requests
url="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
response=requests.get(url=url)
#提取图片的二进制字节码
content=response.content
#将二进制字节码写入文件
with open ('baidu.png','wb') as fp:
fp.write(content)
get()函数
参数介绍
headers 请求头
headers={'User-Agent':'Mozilla/5.0 (Linux; Android 9; SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36 MicroMessenger/7.0.10.1580(0x27000A53 NetType/WIFI Language/zh_CN'}
params 动态参数
timeout 请求超时的时间(s)
timeout=1.0
proxies 代理服务器
proxies={'https':101.123.102.12:7999}
verify参数 绕过SSL证书认证。
现在很多网站要求使用HTTPS协议,但有些网站没有设置好HTTPS证书或者其证书不被CA机构认可,就会出现SSL证书错误的提示。
为了让我们的爬虫进行下去,我们设置verify = False
来取消证书验证。
post()函数
Re正则表达式
普通字符表
元字符表
re模块
findall() 提取满足正则表达式的所有字符串 []
search() 匹配第一个满足正则表达式的字符串,用group()取值
match() 从开头匹配的search()
finditer() 返回迭代器的findall()
BeatifulSoup模块
定位方式
1.标签名
返回第一个p标签
soup.p
2.标签属性
soup.find(class_='')
soup.find_all(id='')
3.标签名+标签属性
soup.find('div',class_='')
4.选择器
返回所有符合条件的标签
(1) id选择器
soup.select('#id_name')
(2) class选择器
soup.select('.class_name')
(3) 标签选择器
soup.select('li')
(4) 层级选择器
>表示向下找一个层级,中间不能有其他层级
空格表示中间可以有多个层级
soup.select('div>ul>#id_name')
soup.select('div>ul>li')
soup.select('div li')
提取文本和属性
string属性返回直系文本
soup.select('.class_name')[1].string
text属性返回所有文本
soup.select('.class_name')[1].string
字典取值提取标签属性
soup.select('.class_name')['class']
Xpath表达式
html=etree.parse('text.html')
html=etree.HTML(response.text)
定位标签
(1)标签名定位
(2)索引定位
(3)属性定位
html.xpath('//*[@class='class_name']')
//表示多层级,*表示任意标签
(4)逻辑运算定位
提取文本内容和属性
/text() 直系文本内容
//text() 所有文本内容
/@属性名 指定属性值
数据清洗
1.异常值处理
替换为空值后删除
data['price'][data['price']>1000=None
data.dropna()
或替换为空值后进行数据插补
data['price'][data['price']>1000=None
data.fillna(data.mean())
\
乱码处理
从网页源码查看<meta>标签的charset属性编码格式
或response.encoding=response.apparent_encoding