我最喜欢用两种解析方式
#第一种解析方式 etree+xpath 提取匹配标签
a = "<div class='a'>123<p>1455555</p></div>"
from lxml import etree
con = etree.HTML(a)
print(con)
print(con.xpath("//div/text()"))
print(con.xpath("//div/p/text()"))
print(con.xpath("//div//text()"))
# 输出结果:
['123']
['1455555']
['123', '1455555']
# 第二种提取标签的方式 Selector +css 提取
from scrapy import Selector
a = "<div class='a'>123<p>1455555</p></div>"
con = Selector(text=a)
print(con)
print(con.xpath("//div/text()").extract())
print(con.xpath("//div/p/text()").extract())
print(con.xpath("//div//text()").extract())
# 输出结果:
<Selector xpath=None data='<html><body><div class="a">123<p>1455555'>
['123']
['1455555']
['123', '1455555']
# string(.)的用法
b = con.xpath("//div")
# 获取标签下面的所有的字符
print(b.xpath("string(.)"))
# 输出结果:
[<Selector xpath='string(.)' data='1231455555'>]
当然还有其他的提取方式,比如说re,css, bs4, pyputer 等等等等, 个人对xpath比较熟悉,所以一般情况下我会使用xpath,有的字段麻烦的,会对提取的结果用一个正则表达式来获取想要的文本。
requests请求的特殊几种获取方式处理
# requests默认使用application/x-www-form-urlencoded对POST数据编码。如果要传递JSON数据,可以直接传入json参数:
url = "https://123456.com"
params = {'key': 'value'}
r = requests.post(url, json=params) # 内部自动序列化为JSON
# 要在请求中传入Cookie,只需准备一个dict传入cookies参数:
cs = {'token': '12345', 'status': 'working'}
r2 = requests.get(url, cookies=cs)