基于Python 爬书旗网小说数据并可视化,通过js逆向对抗网站反爬,想爬啥就爬啥

简介: 本文介绍了如何使用Python编写网络爬虫程序爬取书旗网上的小说数据,并通过逆向工程对抗网站的反爬机制,最后对采集的数据进行可视化分析。

目标:

基于Python的书旗网小说网站的数据采集与分析的目标是通过自动化程序收集书旗网上的小说相关数据,并对这些数据进行分析和处理,以获取有价值的信息和洞察。具体目标包括以下几个方面,首先利用Python编写网络爬虫程序,从书旗网上抓取小说的标题、作者、分类、评分、阅读量等信息,对采集到的数据进行清洗和整理,去除重复、错误或无效的数据,然后将清洗后的数据存储到数据库或文件中,以备后续分析使用。利用Python的数据分析工具,如Pandas、NumPy等,对采集到的数据进行统计分析、可视化和挖掘,分析小说的热门分类、作者的作品数量分布、读者评分情况等,揭示用户喜好和趋势。通过对书旗网上小说市场的数据进行分析,如同类小说的数量、观看量等,了解竞争对手的情况,为制定市场策略和推广活动提供依据。

爬虫过程:

通过分析网页中的JavaScript代码,了解网站的加密和反爬机制,使用Python的相关库(如PyExecJS)模拟执行JavaScript代码,绕过反爬机制,获取所需数据。使用requests库发送HTTP请求:利用Python的requests库发送GET或POST请求,携带相应的URL、参数和请求头信息,模拟浏览器行为,获取整个网页的内容。对于返回的网页内容,如果是JSON格式的数据,可以使用Python内置的json库解析和提取所需的数据字段,将其转化为Python的数据结构,如字典、列表等。具体如下:

1、确定网页URL

2、寻找规律,发现有反爬,其中timestamp用到13位的时间序列,只要转换就可以发现这个数是当前电脑的点击时间,而最难的则是sign,这个数据一直在变化,所以得找到sign对应的js,对这个数据进行逆向,找到规律。

3、定位js,分析js进行逆向

通过分析发现sign的值是经过这个组合生成的:

'1'+页码+'6'+'pc'+当前时间的序列数据+'000'+'MJWLLtDX9kXAHY3EIP8hNvVLiA5qsD8A'

所以只需要通过复制sign的js文件,就能生成所需的sign值,通过PyExecJS库将js文件运行即可。

主要代码如下:

data\_m = open('MD5.js', 'r', encoding='utf-8').read()
data\_z = js2py.eval\_js(data\_m)
sign\_n='1'+str(j+1)+'6'+'pc'+str(int(time.time()))+'000'+'MJWLLtDX9kXAHY3EIP8hNvVLiA5qsD8A'
print(sign\_n)

最后将采集到的数据存储为MySQL。爬虫代码如下:

def shuqi(shu):
    url='https://jognv1.shuqireader.com/copyright/search?page={}&perPage=6&deriveId=&tagId=&deriveStatus=&isHao=&batchId=&order=1&platform=pc&timestamp={}&sign='
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.47'
    }
    for j in range(35,shu):
        data\_m = open('MD5.js', 'r', encoding='utf-8').read()
        data\_z = js2py.eval\_js(data\_m)
        sign\_n='1'+str(j+1)+'6'+'pc'+str(int(time.time()))+'000'+'MJWLLtDX9kXAHY3EIP8hNvVLiA5qsD8A'
        print(sign\_n)
        url1=url.format(str(j+1),str(int(time.time()))+'000')+data\_z(sign\_n)
        print(url1)
        print(data\_z(sign\_n))
        res=requests.get(url.format(str(j+1),str(int(time.time()))+'000')+data\_z(sign\_n),headers=headers).json()

        soup=res\['data'\]\['bookList'\]
        for book\_list in soup:
            list0=\[\]
            name=book\_list\['bookName'\]
            author=book\_list\['authorName'\]
            num=book\_list\['wordNum'\]
            type=book\_list\['copyrightTags'\]
            type0=''
            for t in type:
                type0+=t\['name'\]+' '
            hot=book\_list\['hotScore'\]
            save\_type=book\_list\['derives'\]\['sell'\]
            save\_type0=''
            for d in save\_type:
                save\_type0 += d\['name'\] + ' '
            sell\_out=book\_list\['derives'\]\['sellOut'\]
            sell\_out0=''
            for s in sell\_out:
                sell\_out0 += s\['name'\] + ' '
            zhuangtai=book\_list\['state'\]
            list0.append(name)
            list0.append(author)
            list0.append(num)
            list0.append(type0)
            list0.append(hot)
            list0.append(save\_type0)
            list0.append(sell\_out0)
            list0.append(zhuangtai)
            print(list0)
            cun(list0)
        time.sleep(random.randint(2,4))
if \_\_name\_\_ == '\_\_main\_\_':
    shuqi(40)

爬取效果:

可视化代码就省略了,想要的可以联系我,这里是可视化效果:

相关文章
|
22天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
1月前
|
编解码 数据可视化 前端开发
如何使用 D3.js 创建一个交互式的地图可视化?
如何使用 D3.js 创建一个交互式的地图可视化?
|
20天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
1月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
48 3
|
1月前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
1月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
29 1
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
1月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
80 0
|
1月前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析