欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-19 15:55:17
前言前面的文章(https://blog.csdn.net/qq_43382739/article/details/107513977)主要爬取首页的新闻列表而不是具体的新闻内容,本文会具体的分析如何爬取实际的新闻页面的具体内容观察图中的新闻列表会发现有三种类型的新闻,点进去可以发现三种新闻的页面的类型不同,这里只选择性爬取类似于第一条新闻的类型,另外两种类型的爬取方法相似,可以自己去实践–_--页面分析一个新闻的内容不外乎三种类型:视频,图片,文字。这里选取三种内容都包含的页面来分析,链接如下:...

前言

前面的文章(https://blog.csdn.net/qq_43382739/article/details/107513977)主要爬取首页的新闻列表而不是具体的新闻内容,本文会具体的分析如何爬取实际的新闻页面的具体内容
Python使用requests库爬取中国新闻网指定页面
观察图中的新闻列表会发现有三种类型的新闻,点进去可以发现三种新闻的页面的类型不同,这里只选择性爬取类似于第一条新闻的类型,另外两种类型的爬取方法相似,可以自己去实践–_--

页面分析

一个新闻的内容不外乎三种类型:视频,图片,文字。这里选取三种内容都包含的页面来分析,链接如下:http://www.chinanews.com/gn/2020/07-22/9245520.shtml
Python使用requests库爬取中国新闻网指定页面
打开控制台,视频一般会放在文章最前面,在id为tupian_div的div标签中(这里有坑,后面会讲。。。),正文会放在class为left_zw的div标签里的p标签中,图片会掺杂在p标签中

视频部分的爬取

按照上篇文章的采用xpath对html进行解析,视频主要在div下的source标签中,试着爬取一下地址
Python使用requests库爬取中国新闻网指定页面
明显爬了个寂寞。。。
基本上可以判定视频是通过js动态加载出来的,具体如何应对这种情况的话会在后面的博客里说,因为内容还是比较多
这里的解决办法:在该div下面的第三个script标签中有视频地址,有那么点投机取巧的意思
Python使用requests库爬取中国新闻网指定页面
提取视频地址的具体代码:

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)

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

总结

这只是爬取新闻网页的一个例子,它可能可以爬取同一类型新闻页面的一部分,但不可能保证说对每一个新闻的内容都能正确爬取,还是需要足够的素材去试水吧,慢慢的调试来提高复用性。
我这里只爬取了正文内容,像标题、作者什么的可以自己试着去解析也可以试着爬其他类型的新闻,也可以试着在获取内容的同时加入标签,比如某个文本在strong标签里,那么如果要把该内容渲染到网页上就可以用strong标签。

上一篇博客链接:
https://blog.csdn.net/qq_43382739/article/details/107513977

后面一篇可能会讲怎么处理js加载出的内容的情况–_--

本文地址:https://blog.csdn.net/qq_43382739/article/details/107546209

相关标签: Python爬虫 python