网站首页 > 技术文章 正文
提取网页源代码——Requests 工具包
在我们提取网络信息之前,我们必须将网页的源代码进行提取,Requests工具包现在可以说是最好用和最普及的静态网页爬虫工具,它是由大神Kenneth Reitz所搭建的。在Requests的官方介绍里,Requests所遵守的哲学理念是:
1.Beautiful is better than ugly. (美胜过丑)
2.Explicit is better than implicit.(清晰胜过隐匿)
3.Simple is better than complex.(简单胜过复杂)
4.Complex is better than complicated.(复杂胜过繁琐)
5.Readability counts.(可读性很重要)
Requests工具包的使用非常简单,最主要使用的函数为requests.get(url),其中参数url就是我们想提取源代码的网页,再通过requests.get(url).text将页面转换为字符串,就可以供我们使用了。
信息提取——Xpath
我们普通的网页一般都是XML文档格式,当我们想提取里面的内容时,我们需要借助Xpath来分解其中的格式,提取我们想要的内容。在了解Xpath之前我们需要知道四个基本概念:节点、元素、属性、文本 。我们来看一个例子:
<?xml version="1.0" encoding="ISO-8859-1"?> ? ? <bookstore> ? ? <book> ? <title>Harry Potter</title> ? <author>J K. Rowling</author> ? <year>2005</year> ? <price>29.99</price> ? </book> ? ? </bookstore> ?
这就是一个网页的源码,其中 <bookstore> 是文档节点, <author>J K. Rowling</author> 是元素节点, lang="en" 是属性节点。 J K. Rowling 、2005 和29.99是文本(文本通常就是我们想爬取的内容)。
实例分享——爬取豆瓣电影的信息
接下来我们做一个很简单的实例分享,我们想爬取在豆瓣网上的电影《超时空同居》的导演和演员信息。
首先我们找到电影的URL:
右键点击看网页的源代码 view page source(或者可以进入开发者模式(insepect)):
接下来我们就进入网页源代码了,我们想要搜集的信息就在源代码里,只用输入关键字就可以查看到,比如这里我们输入’雷佳音’就定位到了我们想要寻找的位置:
接下来我们就需要分析TML的格式了,例如我们要找到所有的主演:
大家可以看到有一个普遍的规律:主演的名字所对应的节点名都为a,属性都为rel="v:starring",这样我们就可以很轻易的用xpath的语法定位到拥有这个元素的节点,然后将所有的结果找出。
同理,导演的名字所对应的节点名为a,属性都为rel=" v:directedBy",我们同样可以通过这个定位找到相应的文本:
具体的代码如下:
import requests
?
from lxml import etree
?
?
?
url='https://movie.douban.com/subject/27133303/?from=showing' #输入我们的url
?
get = requests.get(url).text # get(url) 得到我们的网页, text将源网页转化为字符串
?
?
?
selector = etree.HTML(get) # 将源码转换为xpath可以识别的TML格式
?
?
?
info = {} #字典用于储存信息
?
info['电影'] = selector.xpath('//title/text()')[0].strip() # 定位电影名字
?
info['导演']=selector.xpath('//a[@rel="v:directedBy"]/text()') # 定位导演名字
?
info['演员']=selector.xpath('//a[@rel="v:starring"]/text()') # 定位演员名字
?
print(info)
最后我们得到一个字典集的结果:
{'电影': '超时空同居 (豆瓣)', '导演': ['苏伦'], '演员': ['雷佳音', '佟丽娅', '张衣', '于和伟', '王正佳', '陶虹', '李念', '李光洁', '杨玏', '范明', '徐峥', '杨迪', '方龄', '陈昊']}
实例分享2——爬取带有json格式豆瓣电影的信息
首先,json是一种轻量级的数据交换格式,它简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在我们爬虫的过程中,我们有时候可以在开发者模式返回的网页里找到完整的json格式的数据,这时候我们就可以运用requests包里的json函数将爬取到的原文本转化格式,从而方便我们提取内容。我们还是拿豆瓣电影举例:
这是点击分类后我们看到的电影信息,假如我们想爬取这些电影的信息,我们可以点击右键进入开发者模式(inspector)。
在打开开发者模式之后一定要记得刷新一次,否则不会显示之前接收到的页面信息。然后我们选择右边标签的network,下面再点击XHR选项,我们就会看到一个返回的网页,双击它。
上图就是打开后的json文件,由于我的电脑下载了json插件的缘故,它的格式要更清晰(使用Chrome浏览器的同学可以进入Chrome商店下载Juan Ramón JSON Beautifier Chrome插件)。Json文件其实也可以被理解为是一个大的字典,里面有很多层小的字典和列表,我们找到json网页后只需要用requests变成json格式即可方便的提取信息。
代码如下:
import requests
url='https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=&start=0'
get = requests.get(url).json() #用json()函数得到网页源码
?
get = get['data']
?
info = {}
?
for i in range(len(get)):
?
?
info[get[i]['title']] = [get[i]['directors'], get[i]['rate'] ] #提取每部电影的导演和评分
?
print(info)
猜你喜欢
- 2024-11-14 Playwright自动化测试工具之元素定位实战
- 2024-11-14 利器 | AppCrawler 自动遍历测试实践(二):定制化配置
- 2024-11-14 java组件HuTool相关工具类的使用二
- 2024-11-14 手把手教你爬取热门小说《诡秘之主》
- 2024-11-14 Python爬虫之xpath用法全解析(py xpath)
- 2024-11-14 怎么用xpath写drissionpage?或者用相对位置?
- 2024-11-14 通过python+Xpath实现抓取某网站推荐的歌曲
- 2024-11-14 Python自动化工具(python写自动化工具)
- 2024-11-14 web自动化测试——xpath常用案例(web自动化测试平台)
- 2024-11-14 史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)
- 最近发表
-
- 聊一下 gRPC 的 C++ 异步编程_grpc 异步流模式
- [原创首发]安全日志管理中心实战(3)——开源NIDS之suricata部署
- 超详细手把手搭建在ubuntu系统的FFmpeg环境
- Nginx运维之路(Docker多段构建新版本并增加第三方模
- 92.1K小星星,一款开源免费的远程桌面,让你告别付费远程控制!
- Go 人脸识别教程_piwigo人脸识别
- 安卓手机安装Termux——搭建移动服务器
- ubuntu 安装开发环境(c/c++ 15)_ubuntu安装c++编译器
- Rust开发环境搭建指南:从安装到镜像配置的零坑实践
- Windows系统安装VirtualBox构造本地Linux开发环境
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (77)
- vector线程安全吗 (73)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)
