写点什么

【Python 技能树共建】python selectolax 模块 & Python 爬虫模拟登录

作者:梦想橡皮擦
  • 2022 年 7 月 09 日
  • 本文字数:1798 字

    阅读完需:约 6 分钟

Python selectolax 模块是什么

在 Python 爬虫中 selectolax 模块用于解析网页源码,而且效率非常快。


开源地址为:selectolax


模块安装使用下述命令


pip install selectolax
复制代码

怎么用

上手案例

from selectolax.parser import HTMLParser
html = """<h1 id="title" data-updated="20201101">梦想橡皮擦</h1><div class="post">Lorem Ipsum is simply dummy text of the printing and typesetting industry. </div><div class="post">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>"""tree = HTMLParser(html)
ret = tree.css_first('h1#title').text()print(ret)
复制代码


导入模块 parser 中的 HTMLParser 类,就可以对网页源码进行格式化操作,然后执行 css_first() 方法,提取网页内容。其语法格式类似于 cssselect 模块,即 CSS 选择器。


其中 .text() 方法为获取文本内容,.attributes 可以获取标签属性。


如果想要获取网页中多个元素,可以使用下述代码。


rets = [node.text() for node in tree.css('.post')]print(rets)
复制代码

更多的方法和属性

一些简单的属性如下所示。


from selectolax.parser import HTMLParserimport requests
html = requests.get('https://www.example.com/').text
parser = HTMLParser(html)
print(parser.head) # 头标签信息print(parser.root) # 根标签信息
复制代码


还可以移除指定标签,例如下述代码,用到的方法是 strip_tags()


from selectolax.parser import HTMLParsertree = HTMLParser('<html><head></head><body><script></script><div>Hello world!</div></body></html>')tags = ['head', 'style', 'script', 'xmp', 'iframe', 'noembed', 'noframes']tree.strip_tags(tags)print(tree.html)# '<html><body><div>Hello world!</div></body></html>'
复制代码

标签对象 Node

在上文中使用 css_first() 方法得到的是 Node 对象,其常用的属性有 attributes,获取标签属性,child 获取标签子节点。


css() 在当前标签继续查找,html 属性用于获取当前标签的 HTML 代码,其余内容,阅读文档即可理解,不在赘述。

扩展场景

Selectolax 支持两个解析引擎:Modern 和 Lexbor。默认情况下使用 Modern,二者大多数功能相同,差异如下所示。


Lexbor 后端处于测试阶段,缺少一些功能。


from selectolax.lexbor import LexborHTMLParser
html = """<title>梦想橡皮擦</title><div id="updated">爬虫爱好者</div>"""
parser = LexborHTMLParser(html)ret = parser.root.css_first("#updated").text()print(ret)
复制代码


参考资料:官方手册


Python 爬虫模拟登录

Python 爬虫模拟登录是使用脚本实现自动登录,部分站点需要逆向加密逻辑,更多的站点会采用验证码进行鉴权验证。


本文为大家带来最简单的登录,其核心用到的是 requests 模拟 POST 请求。


本次练习使用的站点是 https://www.lanqiao.cn/,可以提前注册一个账号。


因该站点无验证码,所以不需要解决验证码逻辑。

怎么用

上手案例

通过浏览器的开发者工具,抓取登录操作的请求地址和参数逻辑,得到下述信息。


  • 请求网址: https://passport.lanqiao.cn/api/v1/login/?auth_type=login&redirect_url=https:%2F%2Fwww.lanqiao.cn%2F

  • 请求方法: POST


请求参数如下所示:


{ "password": "密码", "login_str": "账号", "usertype": 0 }
复制代码


基于上述内容,使用 requests 模块复现其代码逻辑即可。


import json
import requests
headers = { "content-type": "application/json", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36",}my_data = {"password": "你的密码", "login_str": "你的账号", "usertype": 0}
params = json.dumps(my_data)
res = requests.post('https://passport.lanqiao.cn/api/v1/login/?auth_type=login&redirect_url=https:%2F%2Fwww.lanqiao.cn%2F', headers=headers, data=params)
print(res.cookies)print(res.text)
复制代码


运行代码之后,得到跳转链接和登录之后的用户 cookie,这两个信息很重要,保存在本地可以对接后续操作。



所有的模拟登录,最终都是为了获取用户登录之后的标识字符串,可能为 cookie,也可能为更加复杂一些的,例如 Authorization (服务器 OAUTH2 生成的参数)

扩展场景

很多时候,我们的爬虫模拟登录都是用的自建 cookie 池,你可以顺着这个思路学习。


发布于: 刚刚阅读数: 4
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
【Python技能树共建】python selectolax 模块 & Python爬虫模拟登录_Python_梦想橡皮擦_InfoQ写作社区