python爬取 “得到” App 电子书信息

接下来运行 mitmdump,命令如下所示:

mitmdump -s script.py

打开 “得到” App 的电子书页面,便可以看到 PC 端控制台有相应输出。接着滑动页面加载更多电子书,控制台新出现的输出内容就是 App 发出的新的加载请求,包含了下一页的电子书内容。控制台输出结果示例如图 所示。

控制台输出

可以看到 URL 为 https://dedao.igetget.com/v3/discover/bookList 的接口,其后面还加了一个 sign 参数。通过 URL 的名称,可以确定这就是获取电子书列表的接口。在 URL 的下方输出的是响应内容,是一个 JSON 格式的字符串,我们将它格式化,如图 所示。

在这里插入图片描述

格式化后的内容包含一个 c 字段、一个 list 字段,list 的每个元素都包含价格、标题、描述等内容。第一个返回结果是电子书《情人》,而此时 App 的内容也是这本电子书,描述的内容和价格也是完全匹配的,App 页面如图所示。

在这里插入图片描述

这就说明当前接口就是获取电子书信息的接口,我们只需要从这个接口来获取内容就好了。然后解析返回结果,将结果保存到数据库。

4. 数据抓取

接下来我们需要对接口做过滤限制,抓取如上分析的接口,再提取结果中的对应字段。

这里,我们修改脚本如下所示:

import json

from mitmproxy import ctx

def response(flow):

url = ‘https://dedao.igetget.com/v3/discover/bookList’

if flow.request.url.startswith(url):

text = flow.response.text

data = json.loads(text)

books = data.get(‘c’).get(‘list’)

for book in books:

ctx.log.info(str(book))

重新滑动电子书页面,在 PC 端控制台观察输出,如图所示。

在这里插入图片描述

控制台输出

现在输出了图书的全部信息,一本图书信息对应一条 JSON 格式的数据。

5. 提取保存

接下来我们需要提取信息,再把信息保存到数据库中。方便起见,我们选择 MongoDB 数据库。

脚本还可以增加提取信息和保存信息的部分,修改代码如下所示:

import json

import pymongo

from mitmproxy import ctx

client = pymongo.MongoClient(‘localhost’)

db = client[‘igetget’]

collection = db[‘books’]

def response(flow):

global collection

url = ‘https://dedao.igetget.com/v3/discover/bookList’

if flow.request.url.startswith(url):

text = flow.response.text

data = json.loads(text)

books = data.get(‘c’).get(‘list’)

for book in books:

data = {‘title’: book.get(‘operating_title’),

‘cover’: book.get(‘cover’),

‘summary’: book.get(‘other_share_summary’),

‘price’: book.get(‘price’)

}

ctx.log.info(str(data))

collection.insert(data)

重新滑动页面,控制台便会输出信息,如图所示。

在这里插入图片描述

现在输出的每一条内容都是经过提取之后的内容,包含了电子书的标题、封面、描述、价格信息。

最开始我们声明了 MongoDB 的数据库连接,提取出信息之后调用该对象的 insert() 方法将数据插入到数据库即可。

滑动几页,发现所有图书信息都被保存到 MongoDB 中,如图所示。

在这里插入图片描述

目前为止,我们利用一个非常简单的脚本把 “得到” App 的电子书信息保存下来。

代码部分


import json

import pymongo

from mitmproxy import ctx

client = pymongo.MongoClient(‘localhost’)

db = client[‘igetget’]

collection = db[‘books’]

def response(flow):

global collection

url = ‘https://dedao.igetget.com/v3/discover/bookList’

if flow.request.url.startswith(url):

text = flow.response.text

data = json.loads(text)

books = data.get(‘c’).get(‘list’)

for book in books:

data = {

‘title’: book.get(‘operating_title’),

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
[外链图片转存中…(img-JUMV05qm-1712855471544)]

Python中,爬取网站如当当网的电子书评论通常涉及网络爬虫技术,特别是在使用Scrapy框架的情况下。以下是一个简化的步骤: 1. **安装必要的库**:首先,你需要安装`requests`用于发送HTTP请求获取网页内容,`BeautifulSoup`或`lxml`用于解析HTML文档,以及像`Scrapy`这样的高级爬虫框架。 ```bash pip install requests beautifulsoup4 scrapy ``` 2. **创建项目**:使用Scrapy启动一个新的项目,并生成一个基础的Spider。 ```shell scrapy startproject dangdang_book_reviews cd dangdang_book_reviews scrapy genspider your_spider_name dangdang.com ``` 3. **分析网页结构**:打开目标页面(当当网电子书详情页),查看并理解HTML元素结构,特别是评论部分的XPath或CSS选择器。 4. **编写Spider**:在`your_spider_name.py`中,设置起始URL,解析规则,提取评论信息(比如评论ID、文本等)。 ```python import scrapy class YourSpider(scrapy.Spider): name = "your_spider_name" allowed_domains = ["dangdang.com"] start_urls = ['http://example.dangdang.com/book_detail.htm'] def parse(self, response): # 使用选择器找到评论区域 comment_elements = response.css('div.comment-container') or response.xpath('//div[@class="comment-container"]') for element in comment_elements: yield { 'id': element.css('span#comment_id::text').get(), 'content': element.css('p#comment_text::text').get(), # 可能还需要处理更多字段,例如时间戳等 } # 分析下一页链接,如果存在则继续抓取 next_page = response.css('a.next::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 5. **运行爬虫**:配置好设置文件后,通过命令行运行Spider。 ```shell scrapy crawl your_spider_name ``` 注意:实际操作时,网站可能会有反爬机制,比如验证码、IP限制等,你可能需要设置User-Agent、代理、处理反爬策略等。并且,频繁大量地爬取数据可能会违反网站的服务条款,请务必遵守相关法律法规和网站政策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值