基于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)

爬取效果:

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

相关文章
|
19天前
|
数据采集 NoSQL 关系型数据库
Python爬虫去重策略:增量爬取与历史数据比对
Python爬虫去重策略:增量爬取与历史数据比对
|
2月前
|
XML JSON API
淘宝商品详情API的调用流程(python请求示例以及json数据示例返回参考)
JSON数据示例:需要提供一个结构化的示例,展示商品详情可能包含的字段,如商品标题、价格、库存、描述、图片链接、卖家信息等。考虑到稳定性,示例应基于淘宝开放平台的标准响应格式。
|
23天前
|
数据采集 存储 缓存
Python爬虫与代理IP:高效抓取数据的实战指南
在数据驱动的时代,网络爬虫是获取信息的重要工具。本文详解如何用Python结合代理IP抓取数据:从基础概念(爬虫原理与代理作用)到环境搭建(核心库与代理选择),再到实战步骤(单线程、多线程及Scrapy框架应用)。同时探讨反爬策略、数据处理与存储,并强调伦理与法律边界。最后分享性能优化技巧,助您高效抓取公开数据,实现技术与伦理的平衡。
57 4
|
1月前
|
存储 数据库 Python
利用Python获取网络数据的技巧
抓起你的Python魔杖,我们一起进入了网络之海,捕捉那些悠游在网络中的数据鱼,想一想不同的网络资源,是不是都像数不尽的海洋生物,我们要做的,就是像一个优秀的渔民一样,找到他们,把它们捕获,然后用他们制作出种种美味。 **1. 打开魔法之门:请求包** 要抓鱼,首先需要一个鱼网。在Python的世界里,我们就是通过所谓的“请求包”来发送“抓鱼”的请求。requests是Python中常用的发送HTTP请求的库,用它可以方便地与网络上的资源进行交互。所谓的GET,POST,DELETE,还有PUT,这些听起来像偶像歌曲一样的单词,其实就是我们鱼网的不同方式。 简单用法如下: ``` im
61 14
|
27天前
|
数据采集 数据可视化 数据挖掘
基于Python的App流量大数据分析与可视化方案
基于Python的App流量大数据分析与可视化方案
|
1月前
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
1月前
|
数据采集 存储 JSON
用Python爬虫抓取数据并保存为JSON的完整指南
用Python爬虫抓取数据并保存为JSON的完整指南
|
1月前
|
数据采集 API 数据格式
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
|
12月前
|
数据采集 数据可视化 IDE
用Python获得电影数据并可视化分析
用Python获得电影数据并可视化分析
148 0
|
11月前
|
数据采集 JSON 数据可视化
【Python实战】Python对中国500强排行榜数据进行可视化分析
【Python实战】Python对中国500强排行榜数据进行可视化分析