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

我在利用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)

请问问题出在哪里啊?

3个回答

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标签前,少了任意匹配规则 '.*?'

图片说明

weixin_44680262
不停下脚步的乌龟 哇,十分感谢!辛苦你了还帮我敲出来~~~跪拜大神~~~
大约一年之前 回复

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

weixin_44680262
不停下脚步的乌龟 请问如果想使用正则直接提取‘南北向’怎么实现呢?
大约一年之前 回复
前面就不对,你的<>=这些都没有\\转义。
如果要多行,需要在开头加上(?is)表示多行匹配。
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐