从当当网批量获取图书信息

59 篇文章 0 订阅
10 篇文章 0 订阅

爬取当当网图书数据并保存到本地,使用request、lxml的etree模块、pandas保存数据为excel到本地。

爬取网页的url为:

http://search.dangdang.com/?key={}&act=input&page_index={}

其中key为搜索关键字,page_index为页码。

爬取的数据包括:爬取的数据包括:书名、作者、图书简介、出版社、出版日期、价格、评论数量。

  

代码如下:

import random
import requests
from lxml import etree
import pandas as pd
import time

data = []
data.append(['书名', '作者', '图书简介', '出版社', '出版日期', '价格', '评论数量'])
def get_book_info(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    response.encoding = 'gbk'
    if response.status_code == 200:
        selector = etree.HTML(response.text)        
        book_list = selector.xpath('//*[@id="component_59"]/li')
        for book in book_list:
            # 书名          
            book_name = ''.join(book.xpath('.//p[1]/a/@title'))
            # 作者
            book_author = ''.join(book.xpath('.//p[5]/span[1]/a/@title'))
            # 图书简介
            book_intro = ''.join(book.xpath('.//p[2]/text()'))
            # 出版社
            book_publisher = ''.join(book.xpath('.//p[5]/span[3]/a/@title'))        
            # 出版日期    
            book_date = ''.join(book.xpath('.//p[5]/span[2]/text()'))
            # 价格
            book_price = ''.join(book.xpath('.//p[3]/span[1]/text()'))
            # 评论数量
            book_comments = ''.join(book.xpath('.//p[4]/a/text()'))
            
            # 随机等待时间,防止被封IP
            rdn = random.randint(1, 5)         
            print(f'等待时间:{rdn}')
            time.sleep(rdn)
            data.append([book_name, book_author, book_intro, book_publisher, book_date, book_price, book_comments])

if __name__ == '__main__':    
    keyword = input('请输入搜索关键字:')
    page_index = 1
    while True:
        url = f'http://search.dangdang.com/?key={keyword}&act=input&page_index={page_index}'
        print(f'正在爬取第{page_index}页数据...')
        get_book_info(url)
        page_index += 1
        if page_index > 1:
            break
    df = pd.DataFrame(data[1:], columns=data[0])
    # 将DataFrame保存为Excel文件
    df.to_excel(f'{keyword}.xlsx', index=False)

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

svygh123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值