其他教程

其他教程

Products

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

python利用正则表达式爬取网页的问题

GG网络技术分享 2025-03-18 16:14 1


问题描述:

我在利用python正则表达式爬取网页内文本时(如下图所示)遇到了一些问题:
图片说明

比如爬取250平方米吧,实现代码如下:

area = re.findall(r\'<dd class=\"dd-item size\">.*?<span>.*?</span>.*?<span class=\"item-line\">.*?</span>.*?<span>(.*?)</span>\', resp, re.DOTALL)

但是如果想按照上面的思路继续追加正则表达式爬取“南北向”这个文本就爬取不出来了:

area = re.findall(r\'<dd class=\"dd-item size\">.*?<span>.*?</span>.*?<span class=\"item-line\">.*?</span>.*?<span>.*?</span>.*?<span class=\"item-line\">.*?</span><span>(.*?)</span>\', resp, re.DOTALL)

请问问题出在哪里啊?

网友观点:

resp = \'\'\'

<dd class=\\\"dd-item size\\\">

<span>4室2厅4卫</span>

<span class=\\\"item-line\\\"></span>

<span>250平</span>

<span class=\\\"item-line\\\"></span>

<span>南北向</span>

<span class=\\\"item-line\\\"></span>

<span class=\\\"last\\\">豪华装修</span>

</dd>

\'\'\'

area = re.findall(r\'<dd class=\\\"dd-item size\\\">.*?<span>.*?</span>.*?<span class=\\\"item-line\\\">.*?</span>.*?<span>(.*?)</span>\', resp,

re.DOTALL)

print(area)

area = re.findall(r\'<dd class=\\\"dd-item size\\\">.*?<span>.*?</span>.*?<span class=\\\"item-line\\\">.*?</span>.*?<span>.*?</span>.*?<span class=\\\"item-line\\\">.*?</span>.*?<span>(.*?)</span>\',

resp, re.DOTALL)

print(area)

这个是按照你的方式,修改之后的可用代码,区别你看图片就明白了,最后一组span标签前,少了任意匹配规则 \'.*?\'

可以不用正则,直接获取dd标签下的所有文本内容,这样就能提取出‘4室2厅4卫’‘250m2’‘南北向’‘豪华装修’,然后再清洗一下就行

前面就不对,你的<>=这些都没有\\\\转义。

如果要多行,需要在开头加上(?is)表示多行匹配。

Python爬虫:网页解析(1):正则表达式

本人喜欢看电影,就从豆瓣电影top250开始解析吧。

打开页面(豆瓣电影 Top 250 (douban.com)),可以看到首页有25个电影。查看网页源代码,可以看到如下格式:

标签:

提交需求或反馈

Demand feedback