python | 尝试爬虫 xpath
整理一下自己的笔记
是根据b站up主 大大的小番茄 的教程来看的,非常适合很新很新的新手。
首先要明白爬虫的思路:请求获取网页IP,根据已知的IP获取服务器返回的HTML,找到HTML里面自己需要的信息。
第一部分:HTML
大部分网页的构成分为三个部分:HTML(相当于骨架)、CSS(定义了外观)、JScript(表示功能)。爬虫主要针对的是HTML。
看到的HTML内容的<>称为标签。
常见的标签如下:
标签 | 用法或意义 |
---|---|
<html><html/>
|
中间的元素是网页 |
<body></body>
|
用户可见内容 |
<div>
|
框架 |
<p>
|
段落 |
<li>
|
列表 |
<img>
|
图片 |
<a href ></a>
|
超链接 |
- 其中一些成对出现的标签称为闭合标签,比如
<head> <head/> <div><div/>
,也就是<></>成对出现的。 - 另外一些称为自闭和标签,比如
<input >
,只有一个尖括号,没有与之对应的。
标签里都有一些标签的属性,比如id、style、class等等,标签拥有层级关系。
一个例子:
PS.关于URL
简而言之,就是网址。
http协议——端口80
https协议——端口443
这部分视频非常详细地简单阐述了一下,感兴趣或者有需要的可以看看。
第二部分:python中模拟请求的库
要注意的是:python访问HTML的时候会被拒绝,因此需要“伪装”成一个用户在浏览,因此需要修改头参数(user-agent),还要注意refer、cookie,这部分直接复制粘贴相应的代码即可。
requests库
import requestsurl = "https://www.baidu.com/" # 想要访问的网址
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/91.0.4472.101 Safari/537.36','cookie': '....'}
# 伪装成浏览器
response = requests.get(url, headers=headers) # 响应一个HTML文件
# print(type(response))
# 如果查看response的类型会发现得到的是<class 'requests.models.Response'>
# 如果想查看到具体的HTML内容可以 print(response.text) 得到的东西看起来像乱码,是因为解析网站内容的编码问题(utf8),那么只要指定编码方式来解析就可以看到了
content = response.content.decode('utf-8')
如何查看一个网页的编码格式?
查看网页HTML的<head>
里面的<meta charset="utf-8">
或者在控制台(console)输入 document.charset
或者直接在python中查询response.encoding
第三部分:数据提取Xpath
数据提取方式:Xpath、beautifulsoup4、正则匹配
(这里有一个正则匹配的网站我个人觉得很好用:正则)
使用Xpath的目的是找到数据的路径,这里分两部分记录,
第一钟方法,或者说最简单的方法:直接复制Xpath路径。
第二种方法,需要理解一下Xpath的语法:
Xpath语法:
用法 | 说明 |
---|---|
表达式 选取细节点的所有子节点 如div | 选取div下的所有标签 |
//,如//div | 选取整个HTML页面的所有div标签 |
/,如//head/title | 选取head标签下的title标签 |
@,如//div[@id] | 选取带有id属性的div标签 |
. ,如./span | 选取当前节点下的span标签 |
另外Xpath的语法很丰富,还有一些别的语法,比如通配符、提取属性内容等等,此处略。
(找路径:浏览器 shift+CTRL+C)
(这个地方也可以用一些插件辅助自己找路径)
第四部分:lxml
由于Xpath只能作用于HTML文件而无法作用于content(前文python代码中将HTML转存为content,但其本质上是字符串而不是真正的HTML),所以需要lxml库将其还原为真正的HTML文件供Xpath使用。
使用lxml中的etree对html进行处理:
将字符串转为HTML:
from lxml import etreehtml = etree.HTML(string) # 将字符串转为HTML
找到想要的东西:
divs = html.xpath('//div') # 找到HTML中的所有div元素for div in divs:d = etree.tostring(div,encoding='utf8').decode('utf8')# HTML是无法直接print的,所以要用 utf8 解析并且转化为字符串print(d) # 把找到的元素展示出来# 或者
divs = html.xpath('//div//text()') # divs是list类型
print(divs)
# 实际操作的时候发现上面的运行不了总是有TypeError: Type 'list' cannot be serialized.报错
# 后来使用了下面的代码可以运行成功
# 要注意的是//text(),我看其他人的教程都是/text(),后者我没有运行成功
我的代码:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/91.0.4472.101 Safari/537.36','Cookie': "xhsTrackerId=db9b893f-c57e-4b75-cb2d-8a01dc3e2ef9; customerClientId=718184282725177; ""timestamp2=20220416ac00c9ab7cf224aab55b56f7; ""timestamp2.sig=Uis941-HUqopB8oy944WYrzE1Ffv09eCLwRzd5GD080; ""xhsTracker=url=noteDetail&searchengine=baidu; extra_exp_ids=recommend_comment_hide_clt1,""supervision_exp,supervision_v2_exp,commentshow_exp1,gif_clt1,ques_clt2"}url = 'https://www.xiaohongshu.com/discovery/item/625d43e900000000010256e0'
response = requests.get(url, headers=headers)
# print(type(response))
# print(response.encoding) # 查看编码方式
# print(response.status_code) # 响应码为200,说明正常相应
content = response.content.decode('utf-8')
print(type(content))
# print(content)
# with open("text.html", "w", encoding='utf-8') as f:
# f.write(content)
html = etree.HTML(content)
# print(type(html))
wenan = html.xpath('//*[@id="app"]/div/div[2]/div[1]/main/div//text()') # 类型为list
print(wenan)
到这里就可以得到内容了
PS.要注意一些反爬虫会封IP:可以多用几个user-agent,具体方法可查看其他人的文章
第五部分:导出数据
读取excel文件:xlrd库
写出excel文件:xlwt库
workbook = xlwt.Workbook(encoding='utf8') # 新建一个excel,编码方式为utf8
sheet = workbook.add_sheet('text') # 在excel里面新建sheet,sheet名称为texttext.write(0,0,'name') # 在“text”的sheet下的(0,0)位置(也就是A1)处写入“name”
# 如果要批量写入那就加循环就好了workbook.save("C:\Users\zhang\Desktop\新建 XLSX 工作表.xlsx")
# 保存在你想保存的对应路径下的文件中
# 一个找路径的小tip:shift+鼠标右键
很惭愧我是结果导向才学的爬虫,希望以后有机会把后面的教程看完,继续这个笔记。
python | 尝试爬虫 xpath相关推荐
- python网页爬虫xpath应用
一.认识xpath和xml数据 lxml是Python基于xpath做数据解析的工具 from lxml import etree 1.xpath数据解析 - 通过提供标签路径来获取标签(xpath指 ...
- Python网络爬虫-xpath模块
一.正解解析 单字符:. : 除换行以外所有字符[] :[aoe] [a-w] 匹配集合中任意一个字符\d :数字 [0-9]\D : 非数字\w :数字.字母.下划线.中文\W : 非\w\s :所 ...
- 【Python】爬虫(Xpath):批量爬取彼岸图网4K图(非真正4K)
因为真正的4K图需要登录,并且登录后一天也就只能下载一张,所以就只解析爬取了内容页的高清图片(1200*633左右) 代码实现了我目前所能想到的用户骚操作的判定,例如选择的类目不在这个网站内, 或者这 ...
- 【Python】爬虫-Xpath
Xpath 文章参考:https://www.cnblogs.com/mxjhaima/p/13775844.html#%E6%A1%88%E4%BE%8B 安装 pip install lxml 引 ...
- Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用
Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用 文章目录 Python - 爬虫 - Xpath定位之starts-with()和string( ...
- python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)
全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install lxml" 离线安装,下载 ...
- Python爬虫——XPath的使用
Python爬虫--XPath的使用 使用实例一:获取需要的文字 1.导入需要使用的模块 import urllib.request from lxml import etree 2.发送请求访问网站 ...
- Python 爬虫 xpath 数据解析基本用法
Python 爬虫 xpath 数据解析基本用法 1. 基本语法 1.1 解析 html 语法 1.2 获取标签 1.3 获取标签中的内容 1.4 获取标签中的属性 1.5 通过内容寻找结点 2. 实 ...
- python网络爬虫权威指南 豆瓣_豆瓣Python大牛写的爬虫学习路线图,分享给大家!...
豆瓣Python大牛写的爬虫学习路线图,分享给大家! 今天给大家带来我的Python爬虫路线图,仅供大家参考! 第一步,学会自己安装python.库和你的编辑器并设置好它 我们学习python的最终目 ...
最新文章
- 求集合/字符串中的所有组合 (C语言)
- android SQLite数据库用法图文详解(附源码)
- SO_REUSEADDR和SO_REUSEPORT
- OllyDBG 入门之四--破解常用断点设
- 如果访问云服务器上的文件,如果访问云服务器上的文件
- 信息学奥赛一本通(1134:合法C标识符查)
- Sci下载工具 v2021
- 读取速度500m/s和1000m/s的硬盘,装系统使用起来有区别吗?
- uiautomatorviewer报错“Error taking device screenshot: EOF” ,
- Asp.net MVC 教程汇总
- Eric的日期选择下拉列表小控件
- ComponentOne 2018V2正式发布,提供轻量级的 .NET
- 微信小程序生成分享海报
- 数电 3 逻辑门电路
- IT规划 最容易犯的五大错误
- Unity 模拟投影器(Projector Simulator)
- 在SpringBoot中实现通用Auth认证,有哪几种方式?
- IOS对自动播放语音视频做了限制,h5如何实现间隔一段时间自动播放语音
- mysql怎么对月份进行统计_MySQL如何按月份统计数据详解(转)
- 上交计算机考研专业课,2018上交考研经验贴