当前位置: 首页 > article >正文

当当网书籍信息爬虫

1.基本理论

1.1概念体系

        网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,可以按照我们设置的规则自动化爬取网络上的信息,这些规则被称为爬虫算法。是一种自动化程序,用于从互联网上抓取数据。爬虫通过模拟浏览器的行为,访问网页并提取信息。这些信息可以是结构化的数据(如表格数据),也可以是非结构化的文本。爬虫任务的执行流程通常包括发送HTTP请求、解析HTML文档、提取所需数据等步骤。

1.2技术体系

        1请求库:用于向目标网站发送HTTP请求。常用的请求库包括requests、httplib、urllib等。这些库可以帮助我们模拟浏览器行为,发送GET、POST等请求,并处理响应内容。

        2.解析库:用于解析HTML或XML文档,提取出我们需要的数据。常用的解析库包括BeautifulSoup、lxml、pyquery等。这些库可以帮助我们根据HTML文档的结构和标签,提取出我们需要的数据。

        3.存储库:用于将爬取到的数据存储到本地或数据库中。常用的存储库包括sqlite3、mysql-connector-python、pymongo等。这些库可以帮助我们将数据存储到关系型数据库或非关系型数据库中,以便后续分析和利用。

2.代码编写流程

代码编写流程

        代码共分为3部分,1网页地址规律函数。2网页数据解析,3数据存储。

2.1.网页地址规律

 第一页

网页地址图书畅销榜-近24小时畅销书排行榜-当当畅销图书排行榜

第二页

网页地址第2页_图书畅销榜-近24小时畅销书排行榜-当当畅销图书排行榜

对上面地址分析,发现地址中后面数字发生改变,第一页位数为1,第二页位数为2

依次类推。

编写翻页函数

函数中number为页面地址位数

2.2.页面解析

2.3.网页数据保存

·

3.应用举例

该代码对获取数据进行列表切片处理,由于爬虫数据都是字符串数据,对排名,评论数,转化为整数型数据,推荐数转化为浮点型数据,

网页存在些书籍无电子书价格,编写函数处理该问题,对电子书:字段进行查询,无该字段返回-1,

4.编写代码

import requests
from openpyxl import Workbook,load_workbook
import requests
from bs4 import BeautifulSoup
import os
### 网页请求函数
def wy(number):
    res=requests.get(url='http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-{}'.format(number))
    res.encoding = res.apparent_encoding#解决网页乱码问题
    return res.text
## 网页书籍解析部分
def shuj(number):
    soup = BeautifulSoup(wy(number), 'html.parser')
    f1=soup.find('ul',attrs={'class':"bang_list clearfix bang_list_mode"})
    f2=f1.find_all('li')
    shuj_list=[]## 数据存放列表
    for i in f2:

        #shuj1=i.find('div',attrs={'class':"list_num red"})
        shuj1=i.text.split("\n")
        print(shuj1)
        #shuj_list.append(list(filter(None, shuj1)))
        shuj_list.append(chuli(list(filter(None, shuj1))))
        #print(shuj1)
    return shuj_list
    #print(f)
## 数据处理函数
def chuli(shuj_list):
    print(shuj_list)
    shuru_list=[]## 转化数据存储格式列表
    try:
        shuru_list.append(int(shuj_list[0].replace('.','')))# 排名 # int函数转化书籍类型,字符串转化为整数
        shuru_list.append(shuj_list[1].replace('...', ''))# 书名
        shuru_list.append(int(shuj_list[2].split("条评论")[0]))# 评论数
        shuru_list.append(float(shuj_list[2].split("条评论")[1][:-2].replace('%',''))) # 推荐数
        shuru_list.append(shuj_list[3].split(" 著;")[0]) #作者
        shuru_list.append(shuj_list[4].split("\xa0")[0]) ## 出版时间
        print(shuj_list[4])
        shuru_list.append(shuj_list[4].split("\xa0")[1])# 出版社
        shuru_list.append(shuj_list[5])# 价格
        shuru_list.append(shuj_list[6].replace("\r",''))## 原价
        shuru_list.append(shuj_list[7].replace("\r",'').replace(' ','')) # 折数
        shuru_list.append(dzjiage(shuj_list[9]))# 电子书价格
    except:
        pass
    return shuru_list
## 处理网页中无电子书价格函数
def dzjiage(x):
    if x.find("电子书:")==-1:
        k="无数据"
    else:
        k=x.replace("电子书:",'')
    return k
## 写入excel表类函数
class Excel_write():
    def __init__(self):
        self.excel_file = "当当网书籍信息.xlsx"
        if not os.path.exists(self.excel_file):
            self.wk = Workbook();#创建excel工作薄
            self.wk.create_sheet("书籍信息",0);#sheet表名,位置(从0开始)
    # 默认选择当前活跃选项卡
            self.wb =self.wk['书籍信息']
            self.wb.append(['排名','书名','评论数','推荐数','作者','出版时间','出版社','价格','原价','折数','电子书价格']);#横向插入数据
            self.wk.save(self.excel_file)
        self.wk_load = load_workbook(filename=self.excel_file)
        self.wb_load = self.wk_load['书籍信息']
    def nr1(self,number):
        shuj_list1=shuj(number)## 循环爬取到的数据
        for i in shuj_list1:
            self.wb_load.append(i)## 写入数据
            self.wk_load.save(filename=self.excel_file)## 数据保存


if __name__=="__main__":
    for number in range(1,26):# number为网页的页数
        Excel_write().nr1(number)

 5.运行结果


http://www.kler.cn/a/508044.html

相关文章:

  • Redis 性能优化:多维度技术解析与实战策略
  • 正则表达式先入门,精不精通看修行
  • leetcode hot100(2)
  • PL/SQL语言的语法糖
  • Vulnhub DC-8靶机攻击实战(一)
  • VLANIF配置之区别(Differences in VLANIF Configuration)
  • 【教程】windows下使用docker部署hyperf框架
  • Java最常用的几种设计模式详解及适用业务场景
  • 论文阅读:Structure-Driven Representation Learning for Deep Clustering
  • Vue2+OpenLayers实现折线绘制功能(提供Gitee源码)
  • MySQL 的mysql_secure_installation安全脚本执行过程介绍
  • jenkins-Job构建
  • 55.【5】BUUCTF WEB NCTF2019 sqli
  • 前端框架: Vue3组件设计模式
  • 【经典神经网络架构解析篇】【6】MobileNet网络详解:模型结构解析、创新点、代码实现
  • 重拾Python学习,先从把python删除开始。。。
  • 电子应用设计方案94:智能AI门禁系统设计
  • ubuntu下安装编译cmake,grpc与protobuf
  • 基于微信小程序的中国各地美食推荐平台的设计与实现springboot+论文源码调试讲解
  • 日拱一卒(20)——leetcode学习记录:大小为 K 且平均值大于等于阈值的子数组数目
  • Android wifi热点开关代码记录
  • 代码随想录算法训练营第三十五天-动态规划-01背包(一维)
  • 敏感信息数据搜集系统全英文
  • 【MySQL】表操作
  • C语言的语法糖
  • IvorySQL 4.2 发布