Products
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)表示多行匹配。
本人喜欢看电影,就从豆瓣电影top250开始解析吧。
打开页面(豆瓣电影 Top 250 (douban.com)),可以看到首页有25个电影。查看网页源代码,可以看到如下格式:
Demand feedback