https://zhuanlan.zhihu.com/p/379836932
1、获取数据
urllib2:python自带标准库
requests:需安装,更友好
selenium:相较于requests模拟http协议来获取数据,selenium是通过调用模拟器来获取数据,速度会更慢。
1.1 requests常用模块
https://docs.python-requests.org/zh_CN/latest/user/quickstart.html
https://blog.csdn.net/qq_41556318/article/details/86527763
- request.get
get和post都是获取数据的方式,只不过采用的http不同协议方式。可以统一采用get方式获取数据。需要设置的header等信息通过字典设置好后发送,也可以不设置则自动传空值或默认值。
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get("http://httpbin.org/get", params=payload)
headers参数可以不设置采用默认值。
timeout来限制传送时长
>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
File "", line 1, in
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)
- request.text
https://blog.csdn.net/qq_38900441/article/details/79946377
request.content是保留的字节,.text是自动编译后的字符串,但由于自动编译方式不对,所以遇到汉字之类的情况,需要转换编码方式才能正确显示。
import requests
from bs4 import BeautifulSoup
response = requests.get('https://www.baidu.com')
response.encoding = 'utf-8'
re_text = response.text
print (re_text)
- json转换
内置的json解码器来处理json数据
>>> import requests
>>> r = requests.get('https://api.github.com/events')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...
- headers
显示传送的header数据
>>> r.headers
{
'content-encoding': 'gzip',
'transfer-encoding': 'chunked',
'connection': 'close',
'server': 'nginx/1.0.4',
'x-runtime': '148ms',
'etag': '"e1ca502697e5c9317743dc078f67693f"',
'content-type': 'application/json'
}
- status_code
https://www.stubbornhuang.com/555/
正常状态码为200
>>> r = requests.get('http://httpbin.org/get')
>>> r.status_code
200
- session
如果是账号登陆基本都需要用到保持,因为登陆后才会自动跳转
session = requests.session()
response = session.post(url1,data={"userName":name,"pwd":password})
1.2 selenium模块
https://python-selenium-zh.readthedocs.io/zh_CN/latest/
- 设定浏览器&登陆网址
from selenium import webdriver
from selenium.webdriver.common.keys import Keys ##Keys提供键盘各类输入
driver = webdriver.Chrome()
driver.get(url = url)
- 输入信息
name = driver.find_element(by='name',value="userName")
pwd = driver.find_element(by='name',value="pwd")
name.send_keys('yvegmn')
pwd.send_keys('yvegmnaa')
- 点击
理论上需要设定一个elements,再进行操作,点击一般可以用回车代替(Keys.Enter),也可以用click函数
driver.find_element_by_class_name('layui-btn.layui-btn-fluid').click() #
find_elements_by_class_name这种写法的话,元素名称不能有空格,把空格换成.就可以了。。但是有时候click会失效,用enter会比较方便
- 获取页面详情
driver.page_source
2、解析数据
2.1 re正则匹配
可以查看杂项那一章
2.2 bs
https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/