爬取豆瓣网图书TOP250的数据(一共250本书),书名、链接、作者、出版社、出版时间、价格、评分、评语

from lxml import etree   
import pandas as pd  
import requests  
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'}  
alldata = pd.DataFrame()  
for k in range(0, 10):  
    print('正在爬取第%d页的数据' % (k + 1))  
    url = f'https://book.douban.com/top250?start={k * 25}'  
    response = requests.get(url, headers=headers, timeout=200)  
    text = response.text  
    dom = etree.HTML(text)  
    desc = dom.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/p[1]/text()')  
    href = dom.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div[1]/a/@href')  
    title = dom.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div[1]/a/@title')  
    rate = dom.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/div[2]/span[2]/text()')  
    comment_raw = dom.xpath('//*[@id="content"]/div/div[1]/div/table/tr/td[2]/p[2]/span/text()')  
    # 检查并填充 comment 列表
    if len(comment_raw) < len(title):  
        comment = comment_raw + ["无评论"] * (len(title) - len(comment_raw))  
    else:  
        comment = comment_raw  
    author = [i.split('/')[0].strip() for i in desc]    
    publisher = [i.split('/')[-3].strip() for i in desc]    
    date = [i.split('/')[-2].strip() for i in desc]    
    price = [i.split('/')[-1].strip('元') for i in desc]  
    data = pd.DataFrame({  
        'name': title,  
        'url': href,  
        'author': author,  
        'publisher': publisher,  
        'date': date,  
        'price': price,  
        'rate': rate,  
        'comment': comment  
    })  
    alldata = pd.concat([alldata, data], axis=0, ignore_index=True)  
    alldata.to_csv('豆瓣Top250.csv',index =False,encoding='utf_8_sig')
    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CC-Betsy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值