背景
老项目中的部分接口要下掉,需要去 cat 看下流量,人工一个一个搜索太费劲,也无聊,就写了个脚本来自动检索接口流量,这里就不具体写怎么搞 cat 的了,给一个简单的利用 Python cookie 登录网页,并解析网页内容的方法。
目录
- Python 使用 cookie 登录网页
- xpath HTML 解析
- 这里附带一个完整的获取简书首页文章标题的例子
Python 使用 cookie 登录网页
使用 urllib 库进行 request 请求,据说 requests 库更好一些,我觉得满足需求即可,这里就用 urllib 了,有兴趣的同学可以去看看 requests 库,或者我哪天有时间了再更一版 。。。
因为代码真的很简单,就直接上代码了,注释也写在代码中
# 导包
from urllib import request
url = '要解析的 url 地址'
cookie_str = r'网页F12抓出来一个cookie'
# 构建 rquest 请求
req = request.Request(url)
req.add_header('cookie', cookie_str)
# 发送请求并获取响应
resp = request.urlopen(req).read().decode('utf-8')
# print(resp) # 打印一下响应,会发现就是网页的 html 源码
注:
- 因为我登录的 cat 是内部网站,所以不用设置 ua 等参数,如果是正常的网站(有反爬机制),最好还是设置一下常用的 request headers
XPath 解析 HTML 源码
HTML 的解析可以使用正则表达式,也可以使用 xpath,xpath 比正则要简单太多了
下面给出解析简书首页,获取文章标题的一段代码
给一个获取简书首页文章标题的例子【发现简书有反爬,在此声明,本教程仅供学习使用】
# 导包
from urllib import request
import lxml.etree as etree
# 获取首页源码
url = 'https://www.jianshu.com/'
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
req = request.Request(url=url,headers=headers) # [1]
# 发送请求并获取响应
resp = request.urlopen(req).read().decode('utf-8')
# xpath 解析内容
selector = etree.HTML(resp)
title_list = selector.xpath(r'//a[@class="title"]/text()') # [2]
print(title_list)
------------------输出如下-----------------
['产品经理必备的5类原型部件,你知道几个?', '动物小说|一条狗的追求', '老人与猫', '架构师常用的设计图', '真正抑郁的人是什么样的?', '轧死一条狗,反而得了一箱土鸡蛋', '愿你过自己喜欢的生活']
注释:
- [1] 我们使用第一小节的方法获取了简书首页的源码,不同的是,获取简书首页的源码并不需要登录,并且由于简书有反爬机制,需要构建一个User-Agent,来伪装是浏览器的请求
- [2] 我们使用 xpath 规则提取了首页的所有标题信息,并存储在一个 list 中,这里简单解释下代码中用到的 xpath 语法规则:
-
//a
表示从任意一个位置开始取a
标签,注意这里是两个/
,如果是一个/
就表示绝对路径 -
[@class='title']
[]
表示特定属性的a
标签,我们发现所有的标题都有属性class='title'
,所以我们就这么写了 -
/text()
表示取标签中的内容,在这里就是文章标题内容
-
- 更多的 xpath 语法大家可以去自行搜索
结束语
分享王小波《一只特立独行的猪》里面的一句话,“我反对无趣,反对庄严肃穆的假正经”。