爬取新闻网页中的<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')

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值