1、导包
import requests
2、指定url
检查元素,查看是否是ajax请求,是否有请求参数
3、UA伪装
headers = {
'User-Agent':''
}
4、处理请求参数
param = {'':''}
5、发起请求
检查元素,查看是get请求,还是post请求
response = requests.get(url=url, params=param,headers = headers)
response = requests.post(url = url, data = param,headers = headers)
6、获取响应数据
查看获取的数据类型:html/json
page_text = response.text #html
dic_obj = response.json() #json
7、数据解析
3种方式:
(1)正则表达式
环境包:pip install re
import re
title = '<div class="article_main mb20">.*?<h1>(.*?)</h1>.*?</div>'
title = re.findall(title,page_text,re.S) #返回列表类型
(2)BeautifulSoup
环境包:
pip install bs4
pip install lxml #解析器
导包
from bs4 import BeautifulSoup
创建beautifulsoup对象
soup = BeautifulSoup(page_text,'lxml')
文本和属性内容获取
soup.tagName: 返回html中第一次出现的tagName标签(soup.div)
soup.find('tagName'):同soup.tagName
soup.find('tagName',class_/div=''):属性定位
soup.find_all('tagName'):
soup.select(’某种选择器(class, id, 标签选择器)‘):返回的是一个列表
soup.selet('aa > aa b'):层级选择器
获取标签之间的文本:text/string/get_text()
string:只可以获取直系文本内容
text/get_text():可以获取某一标签下所有文本内容
获取标签中的属性值:soup.a['href']
(3)xpath:最常用且最便捷高效的一种解析方式
--解析原理:
实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。
调用etree对象中的xpath方法结合着xpath表达式实现标签定位和内容捕获
--环境
pip install lxml
--实例化etree对象:from lxml import etree
--加载本地html源码数据
etree.parse(filePath)
--加载网页中获取的源码数据
etree.HTML('page_text')
--xpath('xpath表达式'):层级定位
xpath('/html/body/div'):/表示从根节点定位
xpath('/html//div')://表示多个层级
xpath('//div'):任意位置定位div
xpath('//div[@class='']'):属性定位
xpath('//div[@class='']/p[3]'):索引定位(索引从1开始)
取文本:
xpath('//div[@class='']//li[5]/a/text()'):返回的列表
xpath('//li[7]//text()'):标签拿下所有文本内容
取属性:
xpath('//div[@class='']/img/@src'):属性中的文本(返回列表)
8、数据持久化存储
with open(textPath, 'w', encoding='utf-8') as f:
f.write()