爬取新闻网页中的<P>的匹配问题

问题描述

爬取新闻网页,HTML代码如下:

<div id=ozoom style="ZOOM: 100%">
<founder-content>
<P> 上图:1953年3月11日,我国第一座自动化的炼铁炉——鞍山钢
铁公司第8号炼铁炉开始出铁了。铁水经过化验,质量很好。这是
开始出铁时,冶金部门的领导同志、苏联专家等正在参观的情形。
</P>
....

看到上述新闻主体内容写入到<P></P>中,我在爬虫代码中匹配时写的仍然是大写的P,如下:

import requests
from bs4 import BeautifulSoup

class Content:
    def __init__(self, url, title, body):
        self.url = url
        self.title = title
        self.body = body
def getPage(url):
    req = requests.get(url)
    req.encoding='utf-8'
    return BeautifulSoup(req.text, 'html.parser')
# 中国纪检监察报
def scrapeJCDaily(url):
    bs = getPage(url)
    title = bs.find('h1').text
    lines = bs.find('div',style="ZOOM: 100%").find_all('P')
    body = '\n'.join([line.text for line in lines])
    return Content(url, title, body)

url = 'http://www.jjjcb.cn/content/2019-08/29/content_81276.htm'
content = scrapeJCDaily(url)
print('Title: {}'.format(content.title))
print('URL: {}\n'.format(content.url))
print(content.body)

但是,爬取的结果为:
运行结果
没爬取到上述的段落内容。问题出在哪里呢?

解决方案

在利用Beautiful Soup查找时,在HTML代码中的段落标记不管是用<p></p>,还是用<P></P>,查找匹配时,通通用小写来匹配。亦即将代码

lines = bs.find('div',style="ZOOM: 100%").find_all('P')

改为:

lines = bs.find('div',style="ZOOM: 100%").find_all('p')

即可得到正确结果:
正确结果

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页