问题描述
爬取新闻网页,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')
即可得到正确结果: