python爬虫(四)之九章智算汽车文章爬虫

news2024/11/25 14:59:08

python爬虫(四)之九章智算汽车文章爬虫

闲来没事就写一条爬虫抓取网页上的数据,现在数据已经抓完,将九章智算汽车文章的爬虫代码分享出来。当前代码采用python编写,可抓取所有文章,攻大家参考。

import requests
import json
import csv
from lxml import etree
import time


class JiuzhangAI:

    def __init__(self):
        self.article_list_pre_url = "http://jiuzhang-ai.com/col.jsp?id=105"

        self.start_page = 1
        self.end_page = 1000

        self.headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
            'Accept-Language': 'zh-CN,zh;q=0.9',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Cookie': '_siteStatVisitorType=visitorType_28545812; _siteStatRedirectUv=redirectUv_28545812; _cliid=ui9MLktTy5IU8qQF; _checkSiteLvBrowser=true; _siteStatId=d6211b21-c0af-4f93-a5df-91f51871188d; _siteStatDay=20240313; _siteStatVisit=visit_28545812; _lastEnterDay=2024-03-13; _siteStatReVisit=reVisit_28545812; _reqArgs=; _siteStatVisitTime=1710339315683',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
        }

        self.article_detail_headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
            'Accept-Language': 'zh-CN,zh;q=0.9',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Cookie': '_siteStatVisitorType=visitorType_28545812; _siteStatRedirectUv=redirectUv_28545812; _cliid=ui9MLktTy5IU8qQF; _checkSiteLvBrowser=true; _siteStatId=d6211b21-c0af-4f93-a5df-91f51871188d; _siteStatDay=20240313; _siteStatVisit=visit_28545812; _lastEnterDay=2024-03-13; _siteStatReVisit=reVisit_28545812; _reqArgs=%7B%22args%22%3A%7B%22id%22%3A233%7D%2C%22anchor%22%3A%22_np%3D0_633_7%22%2C%22type%22%3A10%7D; _siteStatVisitTime=1710343180119',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
        }

    def post_request(self, url):
        # response = requests.request("GET", url, headers=headers, data=payload)
        # return response.text
        pass

    def get_request(self, url, headers):
        response = requests.request("GET", url, headers=headers)
        return response.text

    def do_work(self):
        with open('九章智驾.csv', 'w', newline='', encoding='utf-8-sig') as file:
            writer = csv.writer(file)
            csv_title = ["文章分类", "标题", "作者", "发布时间", "原文地址", "正文"]
            writer.writerow(csv_title)

            text = requests.get(self.article_list_pre_url, headers=self.headers).text
            html = etree.HTML(text)
            # tag_hrefs = html.xpath("//div/div[1]/span/a/@href")
            tags = html.xpath("//div/div[1]/span/a")

            # 遍历所有类别
            for tag in tags:
                tag_href = tag.xpath("./@href")[0]
                tag_title = tag.xpath("./text()")[0].replace("\n", "").replace(" ", "")

                # 1. 写第一页
                article_text = requests.get(tag_href, headers=self.headers).text
                articles_html = etree.HTML(article_text)
                article_list_html = articles_html.xpath('//*[@id="newsList31"]/div[@topclassname="top1"]')
                print(tag_href)

                # 遍历所有文章列表
                self.write_page(writer, article_list_html, tag_title)

                # 2. 从2页开始写
                max_page = articles_html.xpath('//span[@class="pageNo"]/a/span/text()')
                if len(max_page) > 0:
                    max_page = int(max_page[0])
                    for current_page in range(2, max_page):
                        article_text = requests.get(tag_href + "&m31pageno=" + current_page, headers=self.headers).text
                        articles_html = etree.HTML(article_text)
                        article_list_html = articles_html.xpath('//*[@id="newsList31"]/div[@topclassname="top1"]')
                        print(tag_href)

                        # 遍历所有文章列表
                        self.write_page(writer, article_list_html, tag_title)

            # page_no = 1
            # pageCallback = self.init_page_callback
            # while True:
            #     print("================> 当前第" + str(page_no) + "页 ============")
            #
            #     text = self.post_request(self.article_list_pre_url)
            #     data = json.loads(text)["data"]
            #     pageCallback = data["pageCallback"]
            #     itemList = data["itemList"]
            #     # self.write_page(writer, itemList)
            #
            #     page_no += 1

    def write_page(self, writer, article_list_html, tag_title):
        for article_html in article_list_html:
            article_href = article_html.xpath("./table/tr/td[@class='newsTitle']/a/@href")[0]
            publish_date = article_html.xpath("./table/tr/td[@class='newsCalendar']/a/text()")[0]
            article_title = article_html.xpath("./@newsname")[0]
            # print(article_href)
            # print(article_title)
            # print(publish_date)

            article_text = requests.get(url=article_href, headers=self.article_detail_headers).text
            article_detail_html = etree.HTML(article_text)
            article_detail_text = article_detail_html.xpath(
                "normalize-space(//div[@class='richContent  richContent0'])")
            article_author = article_detail_html.xpath("//span[@class='newsInfo newsInfo_author']/text()")
            if len(article_author) > 0:
                article_author = article_author[0]
            else:
                article_author = ""
            # print(article_detail_text)
            # print(article_author)

            row = [tag_title, article_title, article_author.replace("作者:", ""), publish_date, article_href,
                   article_detail_text]
            writer.writerow(row)

            print("===========> 当前文章 " + article_href + " 写入完毕", )


if __name__ == '__main__':
    jiuzhangAI = JiuzhangAI()
    jiuzhangAI.do_work()

运行代码在同级目录下会出现一个九章智算.csv文件的,这个就是所有的汽车文章数据啦。

image-20240512233532593

写在最后

代码精选(www.codehuber.com),程序员的终身学习网站已上线!

如果这篇【文章】有帮助到你,希望可以给【JavaGPT】点个赞👍,创作不易,如果有对【后端技术】、【前端领域】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【JavaGPT】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1669570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宝塔安装多个版本的PHP,如何设置默认的PHP版本

如何将默认的PHP版本设置为7.3.32, 创建软链接指向7.3版本,关键命令:ln -sf /www/server/php/73/bin/php /usr/bin/php 然后再查看PHP版本验证一下结果 [rootlocalhost ~]# ln -sf /www/server/php/73/bin/php /usr/bin/php [rootlocalho…

共享充电宝语音芯片ic方案支持远程4g无线更新语音

一、简介 共享充电宝语音芯片ic方案支持远程4g无线wifi蓝牙更新语音 共享充电宝已经是遍布在大街小巷的好产品,解决了携带充电宝麻烦的痛点 但是很多的共享充电宝在人机交互方便,还做得不够好,比如:借、还设备没有语音提示&…

开散列哈希桶

通过上面这幅图,读者应该能较为直观地理解何为开散列,以及闭散列与开散列的区别在哪里 —— 数据的存储形式不同,至于其他的,如确定每个元素的哈希地址等一概相同。 与闭散列相比,开散列能够更好地处理发生冲突的元素 …

知识付费行业数字化转型:转的是什么?你知道吗!

在知识付费的浪潮中,数字化转型正悄然改变着这个行业的格局!那么,知识付费行业数字化转型到底转的是什么呢?这是一个值得我们深入探讨的问题。 1.转的是商业模式:从传统的销售模式转向多元化的盈利模式。从简单的买卖关…

数据结构(二) 线性表

2024年5月13日一稿 线性表的定义与基本操作 数据类型相同(各个元素占用空间相同) 是有限序列 基操

Netty源码分析二NioEventLoop 剖析

剖析方向 NioEventLoop是一个重量级的类,其中涉及到的方法都有很复杂的继承关系,调用链,要想把源码全部过一遍工作量实在是太大了,于是小编就基于下面的这些常见的问题来对NioEventLoop的源码来进行剖析 1.Seletor何时创建 1.1Se…

前端Vue架构

1 理解: 创建视图的函数(render)和数据之间的关联; 当数据发生变化的时候,希望render重新执行; 监听数据的读取和修改; defineProperty:监听范围比较窄,只能通过属性描…

基于SSM的计算机课程实验管理系统的设计与实现(源码)

| 博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅&#x1f44…

架构每日一学 5:拼多多如何通过洞察人性脱颖而出?

本文首发于公众平台:腐烂的橘子 上一篇文章,我们讲到架构活动一定要顺应人性,今天我们就来聊一聊,拼多多如何通过洞察人性在电商行业脱颖而出。 拼多多从诞生到现在,可以说是颠覆了整个互联网的认知。 2015 年&#…

JSON 转为json串后出现 “$ref“

问题描述 转为JSON 串时出现 "$ref":"$.RequestParam.list[0]" $ref: fastjson数据重复的部分会用引用代替,当一个对象包含另一个对象时,fastjson就会把该对象解析成引用 “$ref”:”..” 上一级 “$ref”:”” 当前对…

SpringBoot自动配置源码解析+自定义Spring Boot Starter

SpringBootApplication Spring Boot应用标注 SpringBootApplication 注解的类说明该类是Spring Boot 的主配置类,需要运行该类的main方法进行启动 Spring Boot 应用 SpringBootConfiguration 该注解标注表示标注的类是个配置类 EnableAutoConfiguration 直译&#…

日本率先研发成功6G设备,刺痛了谁?为何日本能率先突破?

日本率先研发成功6G设备,无线数据速率是5G的百倍,这让日本方面兴奋莫名,毕竟日本在科技方面从1990年代以来太缺少突破的创新了,那么日本为何如今在6G技术上能率先突破呢? 日本在1980年代末期达到顶峰,它的科…

华为OD机试 - 求幸存数之和(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…

python将图片以及标注信息按类别分开

目录 需求: 思路: 原数据集结构: 代码1(效率低,但不用提前知道需要分多少个类别): 代码2(效率相对高点,但类别数量如果超过设定的11个,则需要改下代码&a…

MySQL·索引

目录 索引的意义 索引的理解 为何IO交互要是 Page 理解Page 其他数据结构为何不行? 聚簇索引 VS 非聚簇索引 索引操作 主键索引操作 唯一键索引操作 普通索引的创建 总结 全文索引 索引的意义 索引:提高数据库的性能,索引是物美…

[AIGC] 压缩列表了解吗?快速列表 quicklist 了解吗?

文章目录 压缩列表了解吗?快速列表 quicklist 了解吗? 压缩列表了解吗? 压缩列表是 Redis 为了节约内存 而使用的一种数据结构,是由一系列特殊编码的连续内存快组成的顺序型数据结构。 一个压缩列表可以包含任意多个节点&#xf…

ae如何导出mp4格式?图文教程,手把手教您搞定

在创作精彩的视频内容后,将其成功导出为通用的MP4格式是确保作品在不同平台上流畅播放的重要一环。Adobe After Effects作为一款专业的视频后期制作工具,提供了丰富的功能来实现这一目标。在本文中,我们将通过图文教程,手把手地向…

人生是旷野,不是轨道

最近看到一句话,很喜欢,分享一下。"人生是旷野,不是轨道"。人生不是固定的方程式,也没有唯一答案,没有谁生来就应该是什么样。别太被太多世俗观念束缚住手脚,每个人都有权利自由生长,…

【Ubuntu】apt命令安装最新版本Nginx

目录 环境前言添加Nginx仓库步骤1、仓库公钥2、文本公钥转二进制GPG公钥(可选)3、添加apt软件源4、安装新版Nginx 参阅 环境 Ubuntu 22.04 前言 ubuntu官方apt软件仓库(或者叫软件源)的软件版本可能会比较旧,导致无…

Unity 性能优化之GPU Instancing(五)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、GPU Instancing使用方法二、使用GPU Instancing的条件三、GPU Instancing弊端四、注意五、检查是否成功总结 前言 GPU Instancing也是一种Draw call…