当前位置: 移动技术网 > IT编程>脚本编程>Python > Python使用requests库爬取中国新闻网指定页面

Python使用requests库爬取中国新闻网指定页面

2020年07月24日  | 移动技术网IT编程  | 我要评论

前言

前面的文章(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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网