python爬虫
(1)安装requests库
在cmd中
pip install requests
检查是否安装成功
pip list
(2)爬取图片
import requests
path='E:\\爬虫.jpg'
url='http://blog.02868.cn/zb_users/upload/2019/10/20191018113233Python-Crawler.png'
#获取html网页,<Response对象名>=requests.get(url)
r=requests.get(url)
#输出状态码,200,表示服务器正常响应,除200以外,皆表示服务器不正常响应
print(r.status_code)
#当执行完内容后,自动关闭文件,with open(文件名,操作模式) as 文件对象名
#open()函数用于打开一个文件,创建一个file对象
#wb,以二进制格式打开一个文件只用于写入。
#如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。
with open(path,'wb') as f:
#以字节形式(二进制)返回,通常在爬取图片或音乐使用,<Response对象名>.content
f.write(r.content)
#关闭文件
f.close()
(3)爬取网页内容
import requests
url='http://www.glidedsky.com/level/web/crawler-basic-1'
#User-Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分
#Cookie 用于存储 web 页面的用户信息
#静态网页,可忽略headers的添加
headers = {
'Cookie': "__gads=ID=63d546e8a3265b6c-223f828ba4ca007b:T=1628086389:RT=1628086389:S=ALNI_MZb-0PQifOi6J3dDFChQN8bbhTk_Q; _ga=GA1.2.1671214706.1628086390; _gid=GA1.2.91772907.1628086391; Hm_lvt_020fbaad6104bcddd1db12d6b78812f6=1628086390,1628146184; footprints=eyJpdiI6IktCN3FMb2VRZVJlTWkzXC9DdVhKSTV3PT0iLCJ2YWx1ZSI6ImM5SVh1RmFHWTN5WFJrWGJMK1JOYmZxdmRVaEc2emdxaldsN0ZFM2xpd05IUW5JREhudFhqalwvdjduZVR2blhVIiwibWFjIjoiMmE4YmJhZDBmMGIwODg3MDE5OTQ2YmNhNjIyOTRlYjUxNDdiN2RiMGRkNGI0OGZjOGYzNGM4Y2UzNjNkZWEyMyJ9; XSRF-TOKEN=eyJpdiI6ImsyZTQ3ODdCNlpyVkpKdmJjMUx4M1E9PSIsInZhbHVlIjoiZ3hDS3htdVNJaUJzMGdwZzR6QlpQNWc4Rk15QWY1dDZkQ29zYVR4SWlSOVlLXC9HNlduRGFiMDNhMFFzZWhvSVciLCJtYWMiOiJjYTRlOTAxZjNiYjJmM2YxMGVlOWVlM2NhY2ZiYjZjYjZhZGY1MTJhMWJjOTlkZmI5MGMxNTUzY2I5NDNmZWY0In0%3D; glidedsky_session=eyJpdiI6InpnSmI2MFJcLzU1R0FGdlZVdGNtZkhBPT0iLCJ2YWx1ZSI6IkJ5TGJSNEpuTllOWmttNXRaNWJuYXdNanpueTdmMmwwMDhGVU5DTVZhbmI2ekR4KzNUM0lvUXg2KzNHKzlmNHgiLCJtYWMiOiIyNGUwZGI0MGY4YzY5ZTAxY2Q1ZTgxMWNhOTA2OWM0YjcyNzBiZDAyYmI0OWJkYjIzY2NkMTU4NTA3ODYzODhkIn0%3D; Hm_lpvt_020fbaad6104bcddd1db12d6b78812f6=1628147632",
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
}
r=requests.get(url,headers=headers)
try:
#判断返回的Response类型状态是不是200,如果不是200,产生一个HttpError的异常。
r.raise_for_status()
#(通过猜测)获取/修改网页编码,<requests对象名>.encoding
#从网页的内容中分析网页编码的方式,<requests对象名>.apparent_encoding
r.encoding=r.apparent_encoding
#返回字符串类型的网页内容编码,<requests对象名>.text
#print(r.text)
except:
print('响应异常')
(4)页面解析—熬制一锅美味汤
安装beautifulsoup4库
pip install beautifulsoup4
Beautiful Soup 4.4.0 文档,https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
步骤:创建beautifulsoup对象->搜索节点->访问节点名称/节点属性值/节点文字
from bs4 import BeautifulSoup
##创建一个BeautifulSoup解析对象,<对象名>=BeautifulSoup(html字符串,解析方式)
soup=BeautifulSoup(r.text,'html.parser')
##搜索节点
#单个,find(节点名称/节点属性值/节点文字)
#所有,find_all(节点名称/节点属性值/节点文字)
tag=[]
tag=soup.find_all(class_='col-md-1')
n=0
for num in tag:
a=int(num.string[29:32])
n=n+a
print(n)
关于encoding的问题
网页编码问题,网页编码与代码编码不一致产生乱码
url='http://www.most.gov.cn/index.html'
r=requests.get(url)
try:
r.raise_for_status()
#r.encoding=r.apparent_encoding
#此时由于缺少正确的网页编码,爬取的中文字符为乱码
print(r.text)
except:
print('响应异常')