通过第三方模块requests 访问 import requests
1.各种参数直接添加
requests模块已进行参数转换(汉字)等
param={"wd":"美女"}
header={"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Mobile Safari/537.36"}
IP代理:free_proxy={"http":"173.35.169.22:9999"}
发送get请求
respones=requests.get(url,headers=header,proxies=free_proxy,params=param,verify=False)
# 因为HTTPS是有第三方证书认证
# 但是12306虽然是HTTPS,但是他不是ca认证,是自己颁布证书
# 解决方法是告诉web 忽略证书访问get添加参数: verify=False
获取响应数据
data=respones.content.decode("utf-8")
该响应respones中有响应各数据
响应头:respones.headers
响应状态吗:respones.status_code
请求cook:respones.request.cookies
响应cook:respones.cookies
2.cook请求
post请求创建session,自动存储cookies
seeeion=requests.session()
respones=session.post(url,headers=header,data=login_param)
登录成功后直接带着cookies去访问
data=session.get(url,headers=header)
3.xpath 数据解析 from lxml import etree
获取响应数据respones=requests.get(url,headers=header)
数据转换:xpath_data=etree.HTML(respones.content)
xpath语法:
通过一级一级节点查找: /
跨节点查找://
精确节点查找:a[@属性=“属性值”]
模糊查找:a[contain(@属性,“属性值”)]
获取标签值:a/text()
获取标签属性值 a/@href
xpath_data.xpath('/html/head/title/text()')
xpath_data.xpath('//meta[@name="description"]/@content')
xpath_data.xpath('/html/head/meta[6]/@content')
xpath_data.xpath('//div[@class="qq_channel"]/div/@id')
xpath_data.xpath('//*[@id="js_top_news"]/div[2]/h2/a/text()')
4.bs4 数据解析 from bs4 import BeautifulSoup
获取响应数据respones=requests.get(url,headers=header)
数据转换:soup=BeautifulSoup(respones,'lxml')
通过标签对象获取内容:
result = soup.a
result = soup.a.string
# result=soup.a['href']
# result=soup.a.name
result = soup.a.attrs # 获取标签所有属性
# 标签中是注释
result = soup.p.string
# 常用方法
# 1. find 通过标签名称或属性 获取查找的第一个标签
result = soup.find(name='p')
result = soup.find(attrs={"class": "sister"})
# 2.find_all 通过标签名称或属性 返回符合条件标签列表list
result = soup.find_all('a')
result = soup.find_all('a', limit=2) # 取前两个
result = soup.find_all(attrs={"class": "sister"})
# 3、通过CSS选择器 查找
result = soup.select_one('.sister')
result = soup.select('.sister')
result = soup.select('title,.sister') #并列
result = soup.select('a[id="link3"]') #并列
#4.标签包裹内容
result=soup.select('.sister')[0].get_text()
result=soup.select('.sister')[0].get('href')
5.数据格式的转换
import json
import csv
#1、字符串和dic list装换
data='[{"name":"z","age":"20"},{"name":"s","age":"18"}]'
#字符串转list
list_data=json.loads(data)
# print(type(list_data))
#列表转字符串
list=[{"name":"z","age":"20"},{"name":"s","age":"18"}]
data_json=json.dumps(list)
#存储
# json.dump(list,open('20-data_save.json','w'))
#读取
result=json.load(open('20-data_save.json', 'r'))