Python使用requests库爬取中国新闻网指定页面
前言
前面的文章(https://blog.csdn.net/qq_43382739/article/details/107513977)主要爬取首页的新闻列表而不是具体的新闻内容,本文会具体的分析如何爬取实际的新闻页面的具体内容
观察图中的新闻列表会发现有三种类型的新闻,点进去可以发现三种新闻的页面的类型不同,这里只选择性爬取类似于第一条新闻的类型,另外两种类型的爬取方法相似,可以自己去实践–_--
页面分析
一个新闻的内容不外乎三种类型:视频,图片,文字。这里选取三种内容都包含的页面来分析,链接如下:http://www.chinanews.com/gn/2020/07-22/9245520.shtml
打开控制台,视频一般会放在文章最前面,在id为tupian_div的div标签中(这里有坑,后面会讲。。。),正文会放在class为left_zw的div标签里的p标签中,图片会掺杂在p标签中
视频部分的爬取
按照上篇文章的采用xpath对html进行解析,视频主要在div下的source标签中,试着爬取一下地址
明显爬了个寂寞。。。
基本上可以判定视频是通过js动态加载出来的,具体如何应对这种情况的话会在后面的博客里说,因为内容还是比较多
这里的解决办法:在该div下面的第三个script标签中有视频地址,有那么点投机取巧的意思
提取视频地址的具体代码:
videos = news_demo.xpath('//div[@id="tupian_div"]//script')
videos_script = str(videos[2].xpath('text()'))
videos_address = videos_script[videos_script.find('source') + 11:videos_script.find('type=video/mp4') - 1]
这是针对有视频的新闻,因此后续还需对新闻有没有视频做出判断
具体内容和图片的爬取
ps = news_demo.xpath('//div[@class="left_zw"]/*')
for p in ps:
if len(p.xpath('img')) > 0:
print(p.xpath('img/@src')[0])
else:
if not p.xpath('text()'):
continue
for text in p.xpath('text()'):
print(text)
需要解释的代码应该不多吧,xpath的语法在上一篇博客中有
完整代码
def get_real_news(href):
# 采用get方法获取响应
resp = requests.get(href)
# 为防止获取的网页乱码,对响应内容进行重新编码,编码格式可能是utf-8或gbk
html_content = resp.content.decode('utf-8', 'replace')
news_demo = html.etree.HTML(html_content)
# 视频链接爬取
videos = news_demo.xpath('//div[@id="tupian_div"]//script')
if len(videos) == 3: # 判断是否有视频
videos_script = str(videos[2].xpath('text()'))
videos_address = videos_script[videos_script.find('source') + 11:videos_script.find('type=video/mp4') - 1]
print(videos_address)
# 正文内容获取
ps = news_demo.xpath('//div[@class="left_zw"]/*')
for p in ps:
if len(p.xpath('img')) > 0: # 判断p标签中是否嵌入图片
print(p.xpath('img/@src')[0])
else:
if not p.xpath('text()'):
continue
for text in p.xpath('text()'):
print(text)
实现
总结
这只是爬取新闻网页的一个例子,它可能可以爬取同一类型新闻页面的一部分,但不可能保证说对每一个新闻的内容都能正确爬取,还是需要足够的素材去试水吧,慢慢的调试来提高复用性。
我这里只爬取了正文内容,像标题、作者什么的可以自己试着去解析也可以试着爬其他类型的新闻,也可以试着在获取内容的同时加入标签,比如某个文本在strong标签里,那么如果要把该内容渲染到网页上就可以用strong标签。
上一篇博客链接:
https://blog.csdn.net/qq_43382739/article/details/107513977
后面一篇可能会讲怎么处理js加载出的内容的情况–_--
本文地址:https://blog.csdn.net/qq_43382739/article/details/107546209
推荐阅读
-
Python爬虫使用requests库爬取表情包
-
python使用requests库爬取拉勾网招聘信息的实现
-
Python使用requests库爬取中国新闻网指定页面
-
Python爬取求职网requests库和BeautifulSoup库使用详解
-
python爬虫:使用xpath和find两种方式分别实现使用requests_html库爬取网页中的内容
-
Python使用urllib,urllib3,requests库爬取网页
-
Python爬虫之Urllib库使用(一):爬取、保存页面、获取请求信息
-
python使用requests库爬取拉勾网招聘信息的实现
-
Python爬虫使用requests库爬取表情包
-
Python使用requests库爬取中国新闻网指定页面