整理一下自己的笔记
是根据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相关推荐

  1. python网页爬虫xpath应用

    一.认识xpath和xml数据 lxml是Python基于xpath做数据解析的工具 from lxml import etree 1.xpath数据解析 - 通过提供标签路径来获取标签(xpath指 ...

  2. Python网络爬虫-xpath模块

    一.正解解析 单字符:. : 除换行以外所有字符[] :[aoe] [a-w] 匹配集合中任意一个字符\d :数字 [0-9]\D : 非数字\w :数字.字母.下划线.中文\W : 非\w\s :所 ...

  3. 【Python】爬虫(Xpath):批量爬取彼岸图网4K图(非真正4K)

    因为真正的4K图需要登录,并且登录后一天也就只能下载一张,所以就只解析爬取了内容页的高清图片(1200*633左右) 代码实现了我目前所能想到的用户骚操作的判定,例如选择的类目不在这个网站内, 或者这 ...

  4. 【Python】爬虫-Xpath

    Xpath 文章参考:https://www.cnblogs.com/mxjhaima/p/13775844.html#%E6%A1%88%E4%BE%8B 安装 pip install lxml 引 ...

  5. Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用

    Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用 文章目录 Python - 爬虫 - Xpath定位之starts-with()和string( ...

  6. python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install lxml" 离线安装,下载 ...

  7. Python爬虫——XPath的使用

    Python爬虫--XPath的使用 使用实例一:获取需要的文字 1.导入需要使用的模块 import urllib.request from lxml import etree 2.发送请求访问网站 ...

  8. Python 爬虫 xpath 数据解析基本用法

    Python 爬虫 xpath 数据解析基本用法 1. 基本语法 1.1 解析 html 语法 1.2 获取标签 1.3 获取标签中的内容 1.4 获取标签中的属性 1.5 通过内容寻找结点 2. 实 ...

  9. python网络爬虫权威指南 豆瓣_豆瓣Python大牛写的爬虫学习路线图,分享给大家!...

    豆瓣Python大牛写的爬虫学习路线图,分享给大家! 今天给大家带来我的Python爬虫路线图,仅供大家参考! 第一步,学会自己安装python.库和你的编辑器并设置好它 我们学习python的最终目 ...

最新文章

  1. 求集合/字符串中的所有组合 (C语言)
  2. android SQLite数据库用法图文详解(附源码)
  3. SO_REUSEADDR和SO_REUSEPORT
  4. OllyDBG 入门之四--破解常用断点设
  5. 如果访问云服务器上的文件,如果访问云服务器上的文件
  6. 信息学奥赛一本通(1134:合法C标识符查)
  7. Sci下载工具 v2021
  8. 读取速度500m/s和1000m/s的硬盘,装系统使用起来有区别吗?
  9. uiautomatorviewer报错“Error taking device screenshot: EOF” ,
  10. Asp.net MVC 教程汇总
  11. Eric的日期选择下拉列表小控件
  12. ComponentOne 2018V2正式发布,提供轻量级的 .NET
  13. 微信小程序生成分享海报
  14. 数电 3 逻辑门电路
  15. IT规划 最容易犯的五大错误
  16. Unity 模拟投影器(Projector Simulator)
  17. 在SpringBoot中实现通用Auth认证,有哪几种方式?
  18. IOS对自动播放语音视频做了限制,h5如何实现间隔一段时间自动播放语音
  19. mysql怎么对月份进行统计_MySQL如何按月份统计数据详解(转)
  20. 上交计算机考研专业课,2018上交考研经验贴

热门文章

  1. 光纤通信工程-波分复用DWDM(十一)
  2. 利用CSS改变图片颜色的多种方法!
  3. tcp实时传输kafka数据_将物联网数据和MQTT消息流式传输到Apache Kafka
  4. 手机实名认证接口有哪些类别?
  5. HTML/JS/浏览器与串口通信(一)
  6. TLF 0day SERVER 列表
  7. Gate联合NFTBomb七大活动,NBP“holder”的福音
  8. Http中header与body的区别
  9. Unity Labs:AutoLOD –试验自动性能改进
  10. 主流视频编码压缩技术基本概念(二) 算法分析