导航:首页 > 编程语言 > python取html节点内容

python取html节点内容

发布时间:2022-08-20 04:26:42

python怎样抓取当前页面HTML内容

当然这样子也是可以的,不过通用点的方法是用beautifulsoup库去定位id=phoneCodestatus

Ⅱ 怎么用python的BeautifulSoup来获取html中div的内容

# -*- coding:utf-8 -*-

#标签操作

from bs4 import BeautifulSoup
import urllib.request
import re

#如果是网址,可以用这个办法来读取网页
#html_doc = ""
#req = urllib.request.Request(html_doc)
#webpage = urllib.request.urlopen(req)
#html = webpage.read()

html="""
"""
soup = BeautifulSoup(html, 'html.parser') #文档对象

# 类名为xxx而且文本内容为hahaha的div
for k in soup.find_all('div',class_='atcTit_more'):#,string='更多'
print(k)

Ⅲ PYTHON,SELENIUM如何获取HTML内元素,


先定位到,然后接上后面的.get_property('id或者name')

Ⅳ Python爬虫怎么循环截取html标签中间的内容

如果是中间的数据直接就用bs4最简单

from bs4 import BeautifulSoup

#这里是请求过来的额数据处理,提取标签

html = BeautifulSoup(response.text, 'html.parser')

body = html.body # 获取body部分数据

div = body.find("div",{'id','today'}) #用find去找div标签,id叫 today的标签里面的数据

就可以了

如果要提取标签内容比如value的值

div = body.find("input",id='hidden_title')['value']

Ⅳ 如何在python中使用xpath

在进行网页抓取的时候,分析定位html节点是获取抓取信息的关键,目前我用的是lxml模块(用来分析XML文档结构的,当然也能分析html结构), 利用其lxml.html的xpath对html进行分析,获取抓取信息。
首先,我们需要安装一个支持xpath的python库。目前在libxml2的网站上被推荐的python binding是lxml,也有beautifulsoup,不嫌麻烦的话还可以自己用正则表达式去构建,本文以lxml为例讲解。
假设有如下的HTML文档:

1 <html>
2 <body>
3 <form>
4 <div id='leftmenu'>
5 <h3>text</h3>
6 <ul id=’china’><!-- first location -->
7 <li>...</li>
8 <li>...</li>
9 ......
10 </ul>
11 <ul id=’england’><!-- second location-->
12 <li>...</li>
13 <li>...</li>
14 ......
15 </ul>
16 </div>
17 </form>
18 </body>
19 </html>

直接使用lxml处理:
1 import codecs
2 from lxml import etree
3 f=codecs.open("ceshi.html","r","utf-8")
4 content=f.read()
5 f.close()
6 tree=etree.HTML(content)

etree提供了HTML这个解析函数,现在我们可以直接对HTML使用xpath了,是不是有点小激动,现在就尝试下吧。

在使用xpath之前我们先来看看作为对照的jQuery和RE。
在jQuery里要处理这种东西就很简单,特别是假如那个ul节点有id的话(比如是<ul id=’china’>):
$("#china").each(function(){...});

具体到此处是:
$("#leftmenu").children("h3:contains('text')").next("ul").each(function(){...});

找到id为leftmenu的节点,在其下找到一个内容包含为”text”的h3节点,再取其接下来的一个ul节点。
在python里要是用RE来处理就略麻烦一些:
block_pattern=re.compile(u"<h3>档案</h3>(.*?)<h3>", re.I | re.S)
m=block_pattern.findall(content)
item_pattern=re.compile(u"<li>(.*?)</li>", re.I | re.S)
items=item_pattern.findall(m[0])
for i in items:
print i

那么用xpath要怎么做呢?其实跟jQuery是差不多的:
nodes=tree.xpath("/descendant::ul[@id='china']")

当然,现在没有id的话也就只能用类似于jQuery的方法了。完整的xpath应该是这样写的(注意,原文件中的TAG有大小写的情况,但是在XPATH里只能用小写):
nodes=tree.xpath(u"/html/body/form/div[@id='leftmenu']/h3[text()='text']/following-sibling::ul[1]")

更简单的方法就是像jQuery那样直接根据id定位:
nodes=tree.xpath(u"//div[@id='leftmenu']/h3[text()='text']/following-sibling::ul[1]")

这两种方法返回的结果中,nodes[0]就是那个“text”的h3节点后面紧跟的第一个ul节点,这样就可以列出后面所有的ul节点内容了。
如果ul节点下面还有其他的节点,我们要找到更深节点的内容,如下的循环就是把这些节点的文本内容列出:
nodes=nodes[0].xpath("li/a")
for n in nodes:
print n.text

对比三种方法应该可以看出xpath和jQuery对于页面的解析都是基于XML的语义进行,而RE则纯粹是基于plain text。RE对付简单的页面是没有问题,如果页面结构复杂度较高的时候(比如一堆的DIV来回嵌套之类),设计一个恰当的RE pattern可能会远比写一个xpath要复杂。特别是目前主流的基于CSS的页面设计方式,其中大部分关键节点都会有id――对于使用jQuery的页面来说则更是如此,这时xpath相比RE就有了决定性的优势。

附录:基本XPATH语法介绍,详细请参考XPath的官方文档
XPATH基本上是用一种类似目录树的方法来描述在XML文档中的路径。比如用“/”来作为上下层级间的分隔。第一个“/”表示文档的根节点(注意,不是指文档最外层的tag节点,而是指文档本身)。比如对于一个HTML文件来说,最外层的节点应该是”/html”。
同样的,“..”和“.”分别被用来表示父节点和本节点。
XPATH返回的不一定就是唯一的节点,而是符合条件的所有节点。比如在HTML文档里使用“/html/head/scrpt”就会把head里的所有script节点都取出来。
为了缩小定位范围,往往还需要增加过滤条件。过滤的方法就是用“[”“]”把过滤条件加上。比如在HTML文档里使用“/html/body/div[@id='main']”,即可取出body里id为main的div节点。
其中@id表示属性id,类似的还可以使用如@name, @value, @href, @src, @class….
而 函数text()的意思则是取得节点包含的文本。比如:<div>hello<p>world</p>< /div>中,用”div[text()='hello']“即可取得这个div,而world则是p的text()。
函数position()的意思是取得节点的位置。比如“li[position()=2]”表示取得第二个li节点,它也可以被省略为“li[2]”。
不过要注意的是数字定位和过滤 条件的顺序。比如“ul/li[5][@name='hello']”表示取ul下第五项li,并且其name必须是hello,否则返回空。而如果用 “ul/li[@name='hello'][5]”的意思就不同,它表示寻找ul下第五个name为”hello“的li节点。
此外,“*”可以代替所有的节点名,比如用”/html/body/*/span”可以取出body下第二级的所有span,而不管它上一级是div还是p或是其它什么东东。
而 “descendant::”前缀可以指代任意多层的中间节点,它也可以被省略成一个“/”。比如在整个HTML文档中查找id为“leftmenu”的 div,可以用“/descendant::div[@id='leftmenu']”,也可以简单地使用“ //div[@id='leftmenu']”。
至于“following-sibling::”前缀就如其名所说,表示同一层的下一个节点。”following-sibling::*”就是任意下一个节点,而“following-sibling::ul”就是下一个ul节点。

Ⅵ 怎样在python中提取html源文件中的内容(去掉标签后的纯网页的内容)求大神指导,谢谢!

用正则把尖括号的标记都替换为""

\<\w*\>[\s\S]*\<\/\w*\>

Ⅶ python可以爬取本地html页面信息吗

可以的,主要是把URL换成本地HTML页面的目录就好了。

Ⅷ python怎么获取html中指定行内容

一般使用BeautifulSoup,是比较简单的
soup=BeaitifulSoup(html,'html.parser')
要找到某各元素使用find_all方法就行
for div in soup.find_all('div'):
但是经常会遇到网站有反爬的设置,比如子结点中含有换行符,只要写个函数去掉子结点间的换行符就行。

Ⅸ 如何用Python爬取出HTML指定标签内的文本

你好!

可以通过lxml来获取指定标签的内容。

#安装lxml
pipinstalllxml

importrequests
fromlxmlimporthtml

defgetHTMLText(url):
....

etree=html.etree
root=etree.HTML(getHTMLText(url))
#这里得到一个表格内tr的集合
trArr=root.xpath("//div[@class='news-text']/table/tbody/tr");

#循环显示tr里面的内容
fortrintrArr:
rank=tr.xpath("./td[1]/text()")[0]
name=tr.xpath("./td[2]/div/text()")[0]
prov=tr.xpath("./td[3]/text()")[0]
strLen=22-len(name.encode('GBK'))+len(name)
print('排名:{:<3},学校名称:{:<{}} ,省份:{}'.format(rank,name,strLen,prov))

希望对你有帮助!

Ⅹ 为什么用python提取html不全

用python提取html不全的原因:

现在的网站上面有很多的反爬措施,最常见的就是json异步加载,网页上面的数据是json代码加载出来的,所以爬取的html信息不全

具体示例如下:

浏览器显示的内容

实际上爬虫访问链接得到的内容:

更多Python知识,请关注:Python自学网!!

阅读全文

与python取html节点内容相关的资料

热点内容
度人经pdf 浏览:898
怎么配置android远程服务器地址 浏览:956
java程序员看哪些书 浏览:939
什么app可以免费和外国人聊天 浏览:793
pdf手写笔 浏览:178
别永远伤在童年pdf 浏览:986
爱上北斗星男友在哪个app上看 浏览:419
主力散户派发源码 浏览:669
linux如何修复服务器时间 浏览:59
荣县优途网约车app叫什么 浏览:477
百姓网app截图是什么意思 浏览:226
php如何嵌入html 浏览:813
解压专家怎么传输 浏览:745
如何共享服务器的网络连接 浏览:134
程序员简易表白代码 浏览:168
什么是无线加密狗 浏览:64
国家反诈中心app为什么会弹出 浏览:69
cad压缩图打印 浏览:104
网页打开速度与服务器有什么关系 浏览:865
android开发技术文档 浏览:65