Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python如何获取页面上某个元素指定区域的html源码?

Python如何获取页面上某个元素指定区域的html源码?

原创
作者头像
虫无涯
发布于 2023-02-15 02:23:21
发布于 2023-02-15 02:23:21
3.4K00
代码可运行
举报
文章被收录于专栏:全栈测试技术全栈测试技术
运行总次数:0
代码可运行

1 需求来源

  • 自动化测试中,有时候需要获取某个元素所在区域的页面源码,用于后续的对比分析或者他用;
  • 另外在pa chong中可能需要获取某个元素所在区域的页面源码,然后原格式保存下来,比如保存为html或者excel格式数据等。

2 测试对象

  • 获取博客园首页右侧的【48小时阅读排行】词条;
  • 获取博客园首页右侧的【10天推荐排行】词条。
在这里插入图片描述
在这里插入图片描述

3 需求实现

3.1 使用selenium实现

3.1.1 实现过程

  • 查看博客园首页右侧的【48小时阅读排行】元素xpath属性;
在这里插入图片描述
在这里插入图片描述
  • 复制其xpath'//*[@id="side_right"]/div[3]'
  • 查看博客园首页右侧的【10天推荐排行】元素xpath属性:
    在这里插入图片描述
    在这里插入图片描述
  • 复制其xpath'//*[@id="side_right"]/div[4]'
  • 使用selenium的get_attribute('outerHTML')方法进行这两个元素的outerHTML获取:

3.1.2 源码

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/10/13 
# 文件名称:test_selenium_otherHTML.py
# 作用:xxx
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

from selenium import webdriver
import time


content_list = ["content_48_h", "content_10_d"]
el_xpath = ['//*[@id="side_right"]/div[3]',
            '//*[@id="side_right"]/div[4]']
content = []

driver = webdriver.Chrome()
driver.get("https://www.cnblogs.com/")
time.sleep(2)

for i in range(0, 2):
    content_list[i] = driver.find_element_by_xpath(el_xpath[i])
    content.append(content_list[i].get_attribute('outerHTML'))

print(f"48小时阅读排行为:{content[0]}",
      f"10天推荐排行为:{content[1]}")

time.sleep(2)
driver.quit()

3.2 使用requests + lxml.etree实现

3.2.1 实现过程

  • 同样获取对应的元素的xapth:
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 48小时阅读排行
'//*[@id="side_right"]/div[3]'

# 10天推荐排行
'//*[@id="side_right"]/div[4]'
  • 先使用requestsget方法进入网站:
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
res = requests.get('https://www.cnblogs.com/', 
			verify=False, 
			headers=headers)
  • 使用etree方法解析:
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
tree = etree.HTML(res.content)
  • 找到对应的xpath,对应的内容:
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
tree.xpath('//*[@id="side_right"]/div[3]')
tree.xpath('//*[@id="side_right"]/div[4]')

3.2.2 源码

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from lxml import etree
import requests

content_list = ["content_48_h", "content_10_d"]
el_xpath = ['//*[@id="side_right"]/div[3]',
            '//*[@id="side_right"]/div[4]']
content = []

headers = {'Connection': 'close'}

res = requests.get('https://www.cnblogs.com/', verify=False, headers=headers)
tree = etree.HTML(res.content)
for i in range(0, 2):
    content_list[i] = tree.xpath(el_xpath[i])
    print(content_list[i])
    content.append(etree.tostring(content_list[i][0], encoding='utf-8'))
print(f"48小时阅读排行为:{content[0]},",
      f"10天推荐排行为:{content[1]}")
  • 运行以上代码后,发现报错了。。。
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
  File "F:\python_study\test_selenium_otherHTML.py", line 24, in <module>
    content.append(etree.tostring(content_list[i][0], encoding='utf-8'))
IndexError: list index out of range
[]
  • 从结果看,发现找到的对应xpath页面的内容为空,那么可以猜测是因为这个https://www.cnblogs.com/下没有对应的'//*[@id="side_right"]/div[3]''//*[@id="side_right"]/div[4]'

3.2.3 问题排查

3.2.3.1 获取该网址下的源码
  • 使用fiddler抓包https://www.cnblogs.com/下的源码,进行查找我们的关键字【48小时阅读排行】和【10天推荐排行】:
在这里插入图片描述
在这里插入图片描述
  • 复制返回的数据用vscode打开后查找以上关键字:
在这里插入图片描述
在这里插入图片描述
  • 发现没有查找到结果,那么可以证实我们说的https://www.cnblogs.com/下没有对应的'//*[@id="side_right"]/div[3]''//*[@id="side_right"]/div[4]',换言之,我们需要的元素不在这个页面,虽然我们但从网页看是在同一页面,但可能是其他页面加载出来的。所以我们得找到这个原色所在的页面,重新进行定位。
3.2.3.2 使用fiddler找该元素所在网页和属性
  • 打开fiddler后,我们继续访问https://www.cnblogs.com/
  • 往下看,找到接口https://www.cnblogs.com/aggsite/SideRight后,发现返回值里边有我们需要的关键字,那么这个接口地址才是我们需要的,而不是https://www.cnblogs.com/
在这里插入图片描述
在这里插入图片描述
  • 我们复制接口https://www.cnblogs.com/aggsite/SideRight的返回值到vscode中,并进行运行:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 可以看到我们需要的关键字就在以上接口中,所以先确定好我们所需要的关键字的请求接口为:https://www.cnblogs.com/aggsite/SideRight
  • 然后我们从以上运行的页面中,获取真正的【48小时阅读排行】和【10天推荐排行】的元素的属性(xpath)。如下:
在这里插入图片描述
在这里插入图片描述
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 48小时阅读排行
'/html/body/div[1]/ul',

# 10天推荐排行
'/html/body/div[2]/ul'

3.2.4 修正后的源码

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from lxml import etree
import requests

content_list = ["content_48_h", "content_10_d"]
el_xpath = ['/html/body/div[1]/ul',
            '/html/body/div[2]/ul']
content = []

headers = {'Connection': 'close'}

res = requests.get('https://www.cnblogs.com/aggsite/SideRight', verify=False, headers=headers)
tree = etree.HTML(res.content)
for i in range(0, 2):
    content_list[i] = tree.xpath(el_xpath[i])
    print(content_list[i])
    content.append(etree.tostring(content_list[i][0], encoding='utf-8'))
print(f"48小时阅读排行为:{content[0]},",
      f"10天推荐排行为:{content[1]}")
  • 再次运行以上代码,OK了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Requests+Etree+BeautifulSoup+Pandas+Path+Pyinstaller应用 | 获取页面指定区域数据存入文档
注意:请文明上网,本文仅作为学习用。讲述的是思路和方法,所以对被测试网站关键数据进行隐藏。如有需要,可学习思路后自行找测试对象进行学习。
虫无涯
2023/02/15
1.2K0
Python网络爬虫笔记(四):使用selenium获取动态加载的内容
(一)  说明 上一篇只能下载一页的数据,第2、3、4....100页的数据没法获取,在上一篇的基础上修改了下,使用selenium去获取所有页的href属性值。 使用selenium去模拟浏览器有点麻烦,例如有300页就要点300次(按博客园这种一页20条,也就是6000条数据。要是几百万条,这个就得点好长时间了) 研究下有没有办法调用JS修改页面默认显示的数据条数(例如:博客园默认1页显示20条,改成默认显示1万条数据)。 (二)  完整代码 delayed.py的代码还是和之前一样。最好限速,不限速很
free赖权华
2018/04/27
3.4K0
Python网络爬虫笔记(四):使用selenium获取动态加载的内容
【Python爬虫实战】高效解析和操作XML/HTML的实用指南
在 Python 生态系统中,lxml 是一个功能强大且广泛使用的库,用于高效地解析和操作 XML 和 HTML 文档。无论你是处理简单的 HTML 页面还是复杂的 XML 数据结构,lxml 都提供了强大的工具集,包括 XPath、XSLT 转换以及 CSS 选择器支持等。这篇文章从 lxml 的基础安装开始,逐步深入讲解如何解析文档、提取数据、修改文档结构,并涵盖了处理大型文档和使用命名空间等进阶操作。无论你是刚开始接触 lxml 还是希望深入掌握其高级功能,这篇文章都将为你提供完整的参考。
易辰君
2024/11/07
5650
XPath语法和lxml模块
xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历。
用户2200417
2022/02/18
1.3K0
【python爬虫保姆级教学】urllib的使用以及页面解析
pip install bs4 -i https://pypi.douban.com/simple
查理不是猹
2021/12/12
1.4K0
【python爬虫保姆级教学】urllib的使用以及页面解析
【学习笔记】Python爬虫
URL由协议、主机名、端口、路径、参数、锚点 URLError\HTTPError 后者时前者的子类 用try-except捕获异常
Livinfly
2022/10/26
2.1K0
Python爬虫,studiofaporsche网站采集源码
很久没有写过 Python 爬虫了,最近不是在拧螺丝,就是在拧螺丝的路上,手生的很了,很多代码用法也早已经殊生,因此也花了一点时间来梳理,写的比较渣,见谅!
二爷
2023/09/02
4110
Python爬虫,studiofaporsche网站采集源码
Python之xpath、JsonPath、bs4基本使用
1.xpath 1.1 xpath使用: google提前安装xpath插件,按ctrl + shift + x 出现小黑框 安装lxml库 pip install lxml ‐i https://pypi.douban.com/simple 导入lxml.etreefrom lxml import etree etree.parse() 解析本地文件html_tree = etree.parse('XX.html') etree.HTML() 服务器响应文件html_tree = etree.HTML(
鱼找水需要时间
2023/02/16
1.2K0
Python之xpath、JsonPath、bs4基本使用
从零开始,学会Python爬虫不再难!!! -- (2)承接:解析网页,抓取标签 丨蓄力计划
首先可以看到在网页的左侧,输入框有颜色。在网页的右侧,也有一段有颜色的代码,这是怎么肥四呢? 这叫做标记,或者叫搜索,或者叫映射,爱怎么叫怎么叫,咱只需要知道左右两个有颜色的地方是一一对应的。
看、未来
2021/09/18
1.4K0
Python网络爬虫笔记(三):下载博客园随笔到Word文档
(一)   说明 在上一篇的基础上修改了下,使用lxml提取博客园随笔正文内容,并保存到Word文档中。 操作Word文档会用到下面的模块: pip install python-docx 修改的代码(主要是在link_crawler()的while循环中增加了下面这段) 1 tree = lxml.html.fromstring(html) #解析HTML为统一的格式 2 title = tree.xpath('//a[@id="cb_post_title_url"]'
free赖权华
2018/04/27
1.6K0
Python网络爬虫笔记(三):下载博客园随笔到Word文档
Python 爬虫,Nendo 网站作品信息采集爬虫源码!
简单的网站写爬虫就跟流水线加工一样,抄抄改改,没有问题就直接上了,直接了当省事,又是一篇没有营养的水文。一个比较简单的爬虫,适合练手学习使用,主要是爬取和采集网站的作品信息,包括标题、内容及图片,其中图片采用了多线程爬取。
二爷
2024/01/03
2730
Python 爬虫,Nendo 网站作品信息采集爬虫源码!
Python下载,某音乐网站mp3音乐及歌词下载源码
最近循环许巍的那一年,分享到朋友圈,有老板评论好久没听这首歌了,大概率是脱贫了,因为大部分循环听许巍的歌,总会印证那么一句话:贫穷是我们反复相遇。
二爷
2023/09/02
1.2K2
Python下载,某音乐网站mp3音乐及歌词下载源码
Python 爬虫,gk-design 网站作品信息采集爬虫源码!
一个比较简单的爬虫源码,爬取 gk-design 网站作品信息,包括图片及文字内容信息,几乎没有限制,适合新人学习练手使用,文末附上源码供参考学习。
二爷
2023/12/20
3300
Python 爬虫,gk-design 网站作品信息采集爬虫源码!
Python爬虫自学系列(八)-- 项目实战篇(二)爬取我的所有CSDN博客
刚开始呢,我想找网站地图,看看能不能找到属于我的那一块儿。后来发现是我想多了,网站地图是有,但是那么多博主,一人搞一个也不太现实。于是这条路就走不通了。
看、未来
2021/02/01
1.5K0
(数据科学学习手札119)Python+Dash快速web应用开发——多页面应用
   这是我的系列教程Python+Dash快速web应用开发的第十六期,在过往所有的教程及案例中,我们所搭建的Dash应用的访问地址都是单一的,是个单页面应用,即我们所有的功能都排布在同一个url之下。
Feffery
2021/05/07
1.4K0
(数据科学学习手札119)Python+Dash快速web应用开发——多页面应用
一日一技:一个Python爬虫案例,带你掌握xpath数据解析方法!
2.调用etree对象中的xpath方法结合xpath表达式实现标签的定位和内容的捕获。
用户8949263
2022/04/08
4230
一日一技:一个Python爬虫案例,带你掌握xpath数据解析方法!
【Python爬虫】使用request和xpath爬取高清美女图片
urllib.request 是 Python 标准库中的一个模块,它提供了用于打开和读取 URLs(统一资源定位符)的接口。通过使用这个模块,你可以很容易地发送 HTTP 和 HTTPS 请求,并处理响应。以下是对 urllib.request 的简要介绍:
哈__
2024/05/13
3140
【Python爬虫】使用request和xpath爬取高清美女图片
强大的Xpath:你不能不知道的爬虫数据解析库
之前在爬虫解析数据的时候,自己几乎都是用正则表达式,Python中自带的re模块来解析数据。利用正则表达式解析数据的确很强大,但是表达式写起来很麻烦,有时候需要多次尝试;而且速度相对较慢。以后会专门写一篇关于Python正则的文章。
用户8949263
2022/04/08
1.6K0
强大的Xpath:你不能不知道的爬虫数据解析库
Python协程爬虫,gevent获取网页源码打印pdf实例爬虫
Python协程爬虫的一个简单实例demo,使用了队列来进行数据的传递,协程的使用相比单线程会快,感觉在加大协程线的时候,速度并没有相应的加快,或者说占用的时间并没有想象中的少,可以参照使用,仅供参考和学习使用!
二爷
2021/09/15
6240
爬虫之数据解析
  在上一篇关于爬虫的博客里,我提到过,整个爬虫分为四个部分,上一篇博客已经完成了前两步,也就是我说的最难的地方,接下来这一步数据解析不是很难,但就是很烦人,但只要你有耐心,一步一步查找、排除就会提取出目标信息,这一步就相当于从接收到的庞大数据中提取出真正想要、有意义的信息,所以对于爬虫来说,应该是很重要的。
py3study
2020/01/21
1.1K0
推荐阅读
相关推荐
Requests+Etree+BeautifulSoup+Pandas+Path+Pyinstaller应用 | 获取页面指定区域数据存入文档
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验