
get请求参数,如果是中文,需要对中文进行编码,如下面这样,如果不编码会报错。
urlencode应用场景:多个参数的时候。如下
为什么要学习handler?
为什么需要代理?因为有的网站是禁止爬虫的,如果用真实的ip去爬虫,容易被封掉。
2.解析技术
1.安装lxml库
2.导入lxml.etree
3.etree.parse() 解析本地文件
4.etree.HTML() 服务器响应文件
5.解析获取DOM元素
1.路径查询
2.谓词查询
3.属性查询
4.模糊查询
5.内容查询
6.逻辑运算
示例:
JsonPath只能解析本地文件。
pip安装:
jsonpath的使用:
示例:
解析上面的json数据
缺点:效率没有lxml的效率高
优点:接口设计人性化,使用方便
pip install bs4 -i https://pypi.douban.com/simple
from bs4 import BeautifulSoup
1.根据标签名查找节点
soup.a.attrs
2.函数
find(‘a’):只找到第一个a标签
find(‘a’, title=‘名字’)
find(‘a’, class_=‘名字’)
find_all(‘a’) :查找到所有的a
find_all([‘a’, ‘span’]) 返回所有的a和span
find_all(‘a’, limit=2) 只找前两个a
obj.string
obj.get_text()【推荐】
tag.name:获取标签名
tag.attrs:将属性值作为一个字典返回
obj.attrs.get(‘title’)【常用】
obj.get(‘title’)
obj[‘title’]
示例:
使用BeautifulSoup解析上面的html
soup = BeautifulSoup(open('soup.html', encoding='utf8'), 'lxml')
soup.a 只能查找得到第一个符合要求的节点,是一个对象,bs4自己封装类的对象
soup.a.attrs获取得到所有属性和值,是一个字典
soup.a.attrs['href'] 获取指定的属性值
soup.a['href'] 简写形式
soup.a.string
soup.a.text
soup.a.get_text()
soup.find_all('a') 找到所有a
soup.find_all('a', limit=2) 提取符合要求的前两个a
soup.find_all(['a', 'li']) 查找得到所有的a和li
soup.find_all('a', class_='xxx') 查找得到所有class是xxx的a
soup.find_all('li', class_=re.compile(r'^xiao'))
查找所有的class以xiao开头的li标签
id选择器 #dudu
类选择器 .xixi
标签选择器div a h1
div #dudu .xixi a
空格:代表后面的节点是前面节点的子节点或者子孙节点
div >#dudu >a >.xixi
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)