Products
GG网络技术分享 2025-03-18 16:15 3
是这样的,我想用xpath或者正则表达式来把下面这段代码中td里面的内容都提取出来。但是tr中的id全都不是一样的,所以想请教一下各位朋友门,遇到这种情况应该怎么解决才好?
<tr style="height:44px;" tridx="3" id="r-3-0">
<td class="fh tac bw f13-0 pl2 b1" id="A4-0-4612">
第一行第一列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="B4-0-4612">
第一行第二列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="C4-0-4612">
第一行第三列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="D4-0-4612">
第一行第四列
</td>
</tr>
<tr style="height:44px;" tridx="4" id="r-4-0">
<td class="fh tac bw f13-0 pl2 b1" id="A5-0-4612">
第二行第一列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="B5-0-4612">
第二行第二列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="C5-0-4612">
第二行第三列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="D5-0-4612">
第二行第四列
</td>
</tr>
<tr style="height:44px;" tridx="5" id="r-5-0">
<td class="fh tac bw f13-0 pl2 b1" id="A6-0-4612">
第三行第一列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="B6-0-4612">
第三行第二列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="C6-0-4612">
第三行第三列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="D6-0-4612">
第三行第四列
</td>
</tr>
import re
html = '''
<tr style="height:44px;" tridx="3" id="r-3-0">
<td class="fh tac bw f13-0 pl2 b1" id="A4-0-4612">
第一行第一列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="B4-0-4612">
第一行第二列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="C4-0-4612">
第一行第三列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="D4-0-4612">
第一行第四列
</td>
</tr>
<tr style="height:44px;" tridx="4" id="r-4-0">
<td class="fh tac bw f13-0 pl2 b1" id="A5-0-4612">
第二行第一列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="B5-0-4612">
第二行第二列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="C5-0-4612">
第二行第三列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="D5-0-4612">
第二行第四列
</td>
</tr>
<tr style="height:44px;" tridx="5" id="r-5-0">
<td class="fh tac bw f13-0 pl2 b1" id="A6-0-4612">
第三行第一列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="B6-0-4612">
第三行第二列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="C6-0-4612">
第三行第三列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="D6-0-4612">
第三行第四列
</td>
</tr>
'''
print(html)
#content = re.findall('<td [^>]*?>(.*?)></td>', html)
content = re.findall('<td [^>]*?>\\n\\s*([^\\s]*)', html)
print(content)
正则表达式大概就是这么个意思,我给了俩是因为网页里面的html可能不是换行符,而是普通的空白,所以不用匹配\\n之类的东西。想用好爬虫爬取东西,重要的就是找准想要爬取内容之间的共同点。这里面他的id虽然不一样,但是<td>标签下的class都是相同的。所以也可以用xpath这样表示:
from lxml.html import fromstring
tree = fromstring(html)
content = tree.xpath('//td[@class="fh tac bw f13-0 pl2 b1"]/text()')
print(content)
爬虫需要自己多找规律,多练练就搞明白了。
from lxml import etree
wb_data = """
<tr style="height:44px;" tridx="3" id="r-3-0">
<td class="fh tac bw f13-0 pl2 b1" id="A4-0-4612">
第一行第一列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="B4-0-4612">
第一行第二列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="C4-0-4612">
第一行第三列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="D4-0-4612">
第一行第四列
</td>
</tr>
<tr style="height:44px;" tridx="4" id="r-4-0">
<td class="fh tac bw f13-0 pl2 b1" id="A5-0-4612">
第二行第一列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="B5-0-4612">
第二行第二列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="C5-0-4612">
第二行第三列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="D5-0-4612">
第二行第四列
</td>
</tr>
<tr style="height:44px;" tridx="5" id="r-5-0">
<td class="fh tac bw f13-0 pl2 b1" id="A6-0-4612">
第三行第一列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="B6-0-4612">
第三行第二列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="C6-0-4612">
第三行第三列
</td>
<td class="fh tac bw f13-0 pl2 b1" id="D6-0-4612">
第三行第四列
</td>
</tr>
"""
html = etree.HTML(wb_data)
html_data = html.xpath('//td/text()')
print(html_data)
for s in html_data:
print(s.strip())
xpath语法是解析网页最常用的方法之一,本文讲解一下如何在lxml库中使用xpath语法进行网页的解析。
本文分为如下几个部分
我们先看一个例子了解使用lxml的流程
在下面的html代码中其提取如下部分
Demand feedback