Python爬虫实战——爬取新闻数据(简单的深度爬虫)

这篇具有很好参考价值的文章主要介绍了Python爬虫实战——爬取新闻数据(简单的深度爬虫)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

        又到了爬新闻的环节(好像学爬虫都要去爬爬新闻,没办法谁让新闻一般都很好爬呢XD,拿来练练手),只作为技术分享,这一次要的数据是分在了两个界面,所以试一下深度爬虫,不过是很简单的。

数据目标

Python爬虫实战——爬取新闻数据(简单的深度爬虫)

相关库

import openpyxl
import requests
from lxml import etree
from tqdm import tqdm

数据爬取 

 网页url

url = 'https://www.chinanews.com.cn/scroll-news/news1.html'

1.先看看网站网址的规律

Python爬虫实战——爬取新闻数据(简单的深度爬虫)

 发现这部分就是每一天的新闻,现在把这个链接组合一下,我暂时只拿1月份的数据

# 组合日期链接
def cnew_url():
    f = open(r'D:/工作文件/cnew_url.txt', 'w', encoding='utf8')
    for i in range(1, 32):
        if i < 10:
            url = 'https://www.chinanews.com.cn/scroll-news/2023/010' + str(i) + '/news.shtml'
        else:
            url = 'https://www.chinanews.com.cn/scroll-news/2023/01' + str(i) + '/news.shtml'
        f.write(url + '\n')
    f.close()

2.接下来访问每一天的链接获取到新闻的链接还有我们需要的分类的数据,然后再对新闻链接发起request请求获取到我们需要的标题和正文数据

def cnew_data():
    f = open(r'D:/工作文件/cnew_url.txt', encoding='utf8')  # 读取上面已经组合好的链接
    l = openpyxl.load_workbook(r'D:\工作文件\cnew_data.xlsx')
    sheet = l.active
    m = open(r'D:/工作文件/cnew_url1.txt', 'a', encoding='utf8')  # 保存报错的链接
    x = 1  # 从Excel的第几行开始写入
    for i in f:
        lj1 = []
        # 发起请求,获取页面里面的新闻链接
        req = requests.get(i.replace('\n', ''), headers=headers)
        # 设置网页编码,不设置会乱码
        req.encoding = 'utf8'
        ht = etree.HTML(req.text)
        # 获取分类的数据还有正文链接
        fl = ht.xpath("//div[@class='dd_lm']/a/text()")
        lj = ht.xpath("//div[@class='dd_bt']/a/@href")
        # 链接有两种格式,分别组合成可以用的
        for j in lj:
            if j[:5] == '//www':
                lj1.append('https:' + j)
            else:
                lj1.append('https://www.chinanews.com.cn/' + j)
        n = 0  # 这是匹配文章和分类
        for k in tqdm(lj1):
            try:
                data = []
                # 发起请求
                reqs = requests.get(k, headers=headers, timeout=10)
                reqs.encoding = 'utf8'
                ht1 = etree.HTML(reqs.text)
                # 因为这网站的正文所在的xpath路径不同,现在就是拿两种路径下的文本
                bt = ht1.xpath("//h1[@class='content_left_title']/text()")  # 标题
                if bt:  # 判断标题是不是为空,不为空就走第一种xpath
                    data.append([fl[n]])  # 爬到第几个链接就把第几个的类别放进来
                    data.append(ht1.xpath("//h1[@class='content_left_title']/text()"))  # 标题
                    data.append(ht1.xpath("//div[@class='left_zw']/p/text()"))  # 简介
                    data.append([lj1[n]])  # 文章的链接
                else:
                    data.append([fl[n]])
                    data.append(ht1.xpath("//div[@class='content_title']/div[@class='title']/text()"))
                    data.append(ht1.xpath("//div[@class='content_desc']/p/text()"))  # 简介
                    data.append([lj1[n]])
                # 数据写入
                for y in range(len(data)):
                    sheet.cell(x, y + 1).value = '\n'.join(data[y])
                x += 1
                n += 1
            except Exception as arr:
                m.write(lj1[n])
                continue
        # 保存
        l.save(r'D:\工作文件\cnew_data.xlsx')
    f.close()
    m.close()

主函数

if __name__ == '__main__':
    # cnew_url()
    cnew_data()

完整代码

少了一下注释,详细可看前面文章来源地址https://www.toymoban.com/news/detail-514033.html

import openpyxl
import requests
from lxml import etree
from tqdm import tqdm


headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}


# 组合日期链接
def cnew_url():
    f = open(r'D:/工作文件/cnew_url.txt', 'w', encoding='utf8')
    for i in range(1, 6):
        if i < 10:
            url = 'https://www.chinanews.com.cn/scroll-news/2023/020' + str(i) + '/news.shtml'
        else:
            url = 'https://www.chinanews.com.cn/scroll-news/2023/02' + str(i) + '/news.shtml'
        f.write(url + '\n')
    f.close()


def cnew_data():
    f = open(r'D:/工作文件/cnew_url.txt', encoding='utf8')  # 读取上面已经组合好的链接
    l = openpyxl.load_workbook(r'D:\工作文件\cnew_data.xlsx')
    sheet = l.active
    m = open(r'D:/工作文件/cnew_url1.txt', 'a', encoding='utf8')  # 保存报错的链接
    x = 1  # 从Excel的第几行开始写入
    for i in f:
        lj1 = []
        # 发起请求,获取页面里面的新闻链接
        req = requests.get(i.replace('\n', ''), headers=headers)
        # 设置网页编码,不设置会乱码
        req.encoding = 'utf8'
        ht = etree.HTML(req.text)
        # 获取分类的数据还有正文链接
        fl = ht.xpath("//div[@class='dd_lm']/a/text()")
        lj = ht.xpath("//div[@class='dd_bt']/a/@href")
        # 链接有两种格式,分别组合成可以用的
        for j in lj:
            if j[:5] == '//www':
                lj1.append('https:' + j)
            else:
                lj1.append('https://www.chinanews.com.cn/' + j)
        n = 0
        for k in tqdm(lj1):
            try:
                data = []
                reqs = requests.get(k, headers=headers, timeout=10)
                reqs.encoding = 'utf8'
                ht1 = etree.HTML(reqs.text)
                bt = ht1.xpath("//h1[@class='content_left_title']/text()")  # 标题
                if bt:
                    data.append([fl[n]])
                    data.append(ht1.xpath("//h1[@class='content_left_title']/text()"))  # 标题
                    data.append(ht1.xpath("//div[@class='left_zw']/p/text()"))  # 简介
                    data.append([lj1[n]])
                else:
                    data.append([fl[n]])
                    data.append(ht1.xpath("//div[@class='content_title']/div[@class='title']/text()"))
                    data.append(ht1.xpath("//div[@class='content_desc']/p/text()"))  # 简介
                    data.append([lj1[n]])
                for y in range(len(data)):
                    sheet.cell(x, y + 1).value = '\n'.join(data[y])
                x += 1
                n += 1
            except Exception as arr:
                m.write(lj1[n])
                continue
        l.save(r'D:\工作文件\cnew_data.xlsx')
    f.close()
    m.close()


if __name__ == '__main__':
    # cnew_url()
    cnew_data()

到了这里,关于Python爬虫实战——爬取新闻数据(简单的深度爬虫)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 〖Python网络爬虫实战㉕〗- Ajax数据爬取之Ajax 案例实战

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                 python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2024年02月06日
    浏览(24)
  • Python爬虫实战:selenium爬取电商平台商品数据(1)

    def index_page(page): “”\\\" 抓取索引页 :param page: 页码 “”\\\" print(‘正在爬取第’, str(page), ‘页数据’) try: url = ‘https://search.jd.com/Search?keyword=iPhoneev=exbrand_Apple’ driver.get(url) if page 1: input = driver.find_element_by_xpath(‘//*[@id=“J_bottomPage”]/span[2]/input’) button = driver.find_element_by_xpath(‘

    2024年04月28日
    浏览(12)
  • 〖Python网络爬虫实战㉔〗- Ajax数据爬取之Ajax 分析案例

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                 python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2024年02月07日
    浏览(34)
  • Python网络爬虫爬取招聘数据(利用python简单零基础)可做可视化

    身为一个求职者,或者说是对于未来的职业规划还没明确目标的大学生来说,获取各大招聘网上的数据对我们自身的发展具有的帮助作用,本文章就简答零基础的来介绍一下如何爬取招聘数据。 我们以东莞的Python数据分析师这个职位来做一个简单的分析,页面如下图所示:

    2024年02月03日
    浏览(20)
  • (十五)python网络爬虫(理论+实战)——实战:eastmoney沪深京A股股票数据爬取,表格解析

    目录 7 爬取沪深京A股股票数据       7.1 爬取目标

    2023年04月22日
    浏览(12)
  • 【python爬虫实战】用python爬取爱奇艺电视剧十大榜单的全部数据!

    目录 一、爬取目标 二、讲解代码 三、查看结果 四、视频演示 五、附完整源码 本次爬取的目标是,爱奇艺电视剧类目下的10个榜单:电视剧风云榜-爱奇艺风云榜 ​ 可以看到,这10个榜单包含了: 热播榜、飙升榜、必看榜、古装榜、言情榜、都市榜、搞笑榜、年代榜、悬疑

    2024年02月08日
    浏览(19)
  • 爬虫机试题-爬取新闻网站

    之前投简历时遇到了这样的一个笔试。本以为会是数据结构算法之类的没想到直接发了一个word直接提需求,感觉挺有意思就写了这篇文章,感兴趣的朋友可以看看。 通过分析页面结构我们得以知道,这个页面本身没有新闻信息,是由js代码执行后才将信息插入到html中的,因

    2024年04月25日
    浏览(5)
  • python爬虫实战——小说爬取

    基于 requests 库和 lxml 库编写的爬虫,目标小说网站域名http://www.365kk.cc/,类似的小说网站殊途同归,均可采用本文方法爬取。 目标网站 :传送门 本文的目标书籍 :《我的师兄实在太稳健了》 “渡劫只有九成八的把握,和送死有什么区别?” 网络爬虫的工作实际上主要分为

    2024年02月06日
    浏览(13)
  • selenium爬虫——以爬取澎湃新闻某搜索结果为例

    本程序致力于实现以下目标: (1)爬取澎湃新闻关于“反腐”的全部文章内容; (2)按标题、链接将其整理到excel中; (3)将标题和文章整合到一个word文档中。 许久没有正经写过了,有些生疏,代码耦合度蛮高的,所幸目标达成了。 webdriver的版本要与浏览器一致 如果用

    2024年02月06日
    浏览(11)
  • python爬虫实战(3)--爬取某乎热搜

    1. 分析爬取地址 打开某乎首页,点击热榜 这个就是我们需要爬取的地址,取到地址 某乎/api/v3/feed/topstory/hot-lists/total?limit=50desktop=true 定义好请求头,从Accept往下的请求头全部复制,转换成json 2. 分析请求结果 通过请求可以看出, hot-lists/total?limit=50desktop=true 请求后的返回参数

    2024年02月11日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包