利用python爬取豆瓣读书TOP-250

import re
import requests
from bs4 import BeautifulSoup

def book(target_url):
    books = []
    # 使用requests返回网页的整体结构
    book = requests.get(target_url)
    # 使用lxml作为解析器,返回一个Beautifulsoup对象
    soup = BeautifulSoup(book.text, 'lxml')
    # 找到其中所有width=100%的table标签),即找到所有的书
    table = soup.findAll('table', {"width": "100%"})

    # 遍历table,一个item代表一本书
    for item in table:
        # 找到书名
        name = item.div.a.text.strip()
        # 通过看网页的HTML结构,可以发现书名后是有换行以及空格的,将这些全部通过replace替换去除
        r_name = name.replace('\n', '').replace(' ', '')
        # 判断是否存在别名
        tmp2 = item.div.span
        if tmp2:
            # 因为是通过div.span判断别名 有些书的别名前面有个冒号,比如《三体系列》
            name2 = tmp2.text.strip().replace(':', '')
        else:
            # 无别名就使用原始的名称
            name2 = r_name

        # 获取书的链接
        url = item.div.a['href']
        # 获取书的信息
        info = item.find('p', {"class": "pl"}).text
        # 获取分数
        score = item.find('span', {"class": "rating_nums"}).text.strip()
        # 获取评价人数
        nums = item.find('span', {"class": "pl"}).text.strip()
        # 通过正则取具体的数字
        num = re.findall('(\d+)人评价', nums)[0]
        # 判断是否存在描述
        if item.find('span', {"class": "inq"}):
            desc = item.find('span', {"class": "inq"}).text.strip()
        else:
            desc = 'no description'
            # 以元组存入列表
        books.append((r_name, name2, url, info, score, num, desc))
    return books #返回一页的书籍


for n in range(10):
    # top250的网页,每页25本书,共10页,“start=”后面从0开始,以25递增
    url1 = 'https://book.douban.com/top250?start=' + str(n*25)
    tmp = book(url1)
    with open('豆瓣读书TOP250/booktop250.txt', 'a', encoding='utf-8') as d:
        # 新建一个文件存放数据,模式取'a',表示在后面追加;
        # 编码一定要写上,因为win下新建文件,默认是gbk编码,但是前面返回的结构是unicode的,会报编码错误
        for i in tmp:
            print(i[0]+"\t"+i[1]+"\t"+i[2]+"\t"+i[3]+"\t"+i[4]+"\t"+i[5]+"\t"+i[6], file=d)
爬取内容写入.txt文件中,没整理好,给大家一个参考

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值