基于Python爬虫对当当网图书信息采集(10w条数据)+代码

19 篇文章 0 订阅
12 篇文章 0 订阅

基于搜索结果,我将为您提供一个关于当当图书网数据采集的文章框架,假设我们已经有了10万条数据的采集结果。请注意,由于没有具体的数据文件,以下内容将是一个示例性的框架,您可以根据实际采集到的数据进行填充和调整。


当当图书网数据采集分析:10万条数据的深入洞察

引言

在数字化时代,数据成为了理解和预测市场趋势的关键。本文将展示如何通过数据采集技术从当当图书网获取10万条图书数据,并对其进行分析,以揭示图书市场的一些有趣现象和趋势。

数据采集

采集工具与方法

  • 使用Python语言结合requests和lxml库进行网络爬虫开发。
  • 通过XPath表达式精确提取图书信息,包括书名、作者、单价、出版日期、出版社和书籍简介。

数据采集过程

  1. 确定采集目标和关键字。
  2. 发送HTTP请求获取网页内容。
  3. 解析网页,提取所需数据。
  4. 遍历多页以获取更多信息。
  5. 异常处理和数据存储。

数据处理

数据清洗

  • 使用pandas库进行数据清洗,移除不完整或错误的记录。
  • 转换数据类型,确保数据的一致性和准确性。

数据存储

  • 将清洗后的数据存储至Excel文件和数据库中,以便进一步分析。

数据分析

书籍价格分布

  • 分析不同价格区间的图书数量,揭示市场的价格偏好。

出版社影响力

  • 统计各出版社的图书数量,评估市场影响力。

作者贡献度

  • 计算每位作者的图书数量,识别市场上的热门作者。

评论分析

  • 分析图书评论的分布情况,了解读者的反馈和偏好。

数据可视化

价格分布图

  • 柱状图展示不同价格区间的图书数量。

出版社排名图

  • 折线图展示出版社的图书数量排名。

作者出书数量图

  • 条形图展示作者的出书数量。

评论热力图

  • 热力图展示图书评论的分布情况。

结论

通过对10万条当当图书网数据的采集和分析,我们能够深入理解当前图书市场的动态,为出版社、作者和读者提供有价值的市场洞察。


在这里插入图片描述在这里插入图片描述
在这里插入图片描述

完整代码

def get_page_tree(url):
    from requests.adapters import HTTPAdapter
    page = requests.session()
    page.mount('http://',HTTPAdapter(max_retries=80))
    page.mount('https://',HTTPAdapter(max_retries=80))
    page = page.request("GET",url=url,timeout=120)
    print('page ' , page ,page.text)

    tree = etree.HTML(page.text)
    return tree


# xpath语法 获取li对象 因为li标签不只一个 所以用lis
def get_lis(tree):
    lis = tree.xpath('//*[@id="search_nature_rg"]/ul/li')
    return lis


def deal_save(url , pressN,page_index):
    global sum
    global row
    tree = get_page_tree(url)
    # 获取到lis对象
    lis = get_lis(tree)
    # time.sleep(random.randint(1,3))
    print("正在爬取...", url)
    # 遍历lis 返回index下标和item
    try:
        for c, i in enumerate(lis):
            # 根据xpath规则提取图书标题
            name = i.xpath('a/@title')
            name = str(name[0])
            name = name.strip()
            # 根据xpath规则提取图书描述
            desc = i.xpath('p[2]/text()')
            # 根据xpath规则提取图书价格和该书电子书的价格
            price_normal = i.xpath('p[3]/span[1]/text()')  # 纸质书的价格

            price_normal = price_normal[0]
            price_net = i.xpath('p[3]/a/i/text()')  # 电子书的价格
            # 根据xpath规则提取图书的作者
            author = i.xpath('p[@class="search_book_author"]/span[1]/a/text()')  # 作者
            if len(author) == 0:
                author = '没有作者'
            else:
                author = author[0]
            # 根据xpath规则提取图书出版时间
            press_time = i.xpath('p[@class="search_book_author"]/span[2]/text()')
            if len(press_time) == 0:
                press_time = '出版时间为空'
            else:
                press_time = press_time[0][2:]
            # 根据xpath规则提取图书出版社
            press = i.xpath('p[@class="search_book_author"]/span[3]/a/text()')
            if len(press) == 0:
                press = '出版社为空'
            else:
                press = press[0]
            if len(desc) != 0:
                desc = desc[0]
            else:
                desc = "null"
            if len(price_net) != 0:
                price_net = price_net[0]
            else:
                price_net = "暂无电子书"
            sum += 1
            # 输出信息
            print('第{}页--第{}条数据--累计爬取{}条:'.format(page_index, c, sum))
            print('书名:《{}》'.format(name))
            print('图书价格:{}'.format(price_normal))
            print('电子书价格:{}'.format(price_net))
            print('作者:{}'.format(author))
            print('出版社:{}'.format(press))
            print('出版时间:{}'.format(press_time))
            print('*' * 25)
            time.sleep(0.1)
            # 保存信息
            sheet.write(row, 0, name)
            sheet.write(row, 1, desc)
            sheet.write(row, 2 , price_normal)
            sheet.write(row, 3 , price_net)
            sheet.write(row, 4 , author)
            sheet.write(row, 5 , press_time)
            sheet.write(row, 6 , press)
            row = row + 1

    except Exception as e:
        print(e)



# 主要爬虫程序  遍历给定出版社 所有的图书
def start (url , pressN):
    # 获取page的etree
    new_url = url.format(press_name, 1)
    tree = get_page_tree(new_url)
    # 获取该出版社展示图书总页数
    total = tree.xpath('//*[@id="12810"]/div[5]/div[2]/div/ul/li[9]/a/text()')[0]
    print('{}一共{}页'.format(pressN,total))
    # 全局变量的sum 总数
    global sum
    # time.sleep(2)
    # 线程保存的数组
    threads = [ ]
    # 遍历所有页面 从1到total
    for page_index in range(1, int(total) + 1):
        time.sleep(0.2)
        temp_url = url.format(pressN,page_index)
        temp_t = Thread(target=deal_save , args = ( temp_url,press_name,page_index, ))
        threads.append(temp_t)
        temp_t.start()
    for index, t in enumerate(threads):
        t.join()


if __name__ == '__main__':
    # 通过file读取所有出版社 保存为list数组
    s = time.time()
    press = []


    with open('Press.txt' , 'r' , encoding='utf-8') as f :
        a = f.read()
        f.close()
    # 拆封数据
    press = a.split('\n')
    url = 'http://search.dangdang.com/?key={}&page_index={}'
    # 遍历所有出版社
    for press_name in press:
        start(url , press_name)
        print('正在采集{}'.format(press_name))

    end = time.time()
    book.save('当当网图书汇总.xlsx')
    print(  '共花费:' ,str((end-s) ) , 's ,共计爬取:{}条'.format(sum))
  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬取当当网Python图书信息,可以使用Python编写爬虫程序来实现。首先,通过观察当当网的搜索URL,可以得到搜索关键字"Python"的URL链接为和。其中,是第一页的搜索结果,是第二页的搜索结果。爬虫程序可以通过模拟HTTP请求访问搜索结果页面,然后解析页面内容来获取图书信息。 以下是一个简单的示例代码,演示如何使用Python爬虫获取当当网Python图书信息: ```python import requests from bs4 import BeautifulSoup def get_book_info(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') book_list = soup.find_all('div', class_='name') for book in book_list: title = book.find('a').text.strip() author = book.find('span', class_='t1').text.strip() price = book.find('span', class_='search_now_price').text.strip() print(f"书名: {title}, 作者: {author}, 价格: {price}") # 爬取第一页的图书信息 url1 = "http://search.dangdang.com/?key=Python&act=input" get_book_info(url1) # 爬取第二页的图书信息 url2 = "http://search.dangdang.com/?key=Python&act=input&page_index=2" get_book_info(url2) ``` 这段代码使用了`requests`库发送HTTP请求,使用了`BeautifulSoup`库解析HTML页面。它通过指定的URL链接发送请求,并使用CSS选择器查找图书信息的相关元素。在示例中,我们获取了书名、作者和价格,并打印出来。 可以通过调用`get_book_info`函数来获取当当网Python图书信息。传入不同的URL链接可以获取不同页数的图书信息。你可以根据需要,进一步处理获取到的图书信息,比如存储到数据库或写入文件中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【爬虫】4.5 实践项目——爬取当当网图书数据](https://blog.csdn.net/qq_57268251/article/details/131177457)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值