其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

关于xpath和正则表达式应用的问题

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全面总结

xpath语法是解析网页最常用的方法之一,本文讲解一下如何在lxml库中使用xpath语法进行网页的解析。

本文分为如下几个部分

  • 解析html流程说明
  • 提取内容
  • 识别标签

解析html流程说明

我们先看一个例子了解使用lxml的流程

在下面的html代码中其提取如下部分

  • 标题
  • 文字1
  • 文字1和文字2
  • 列表1第1项 列表1第2项

标签:

提交需求或反馈

Demand feedback