您当前的位置: 首页 > 

王同学在这

暂无认证

  • 2浏览

    0关注

    35博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

request+BeautifulSoup Top 500 本五星好评书籍

王同学在这 发布时间:2022-03-01 18:47:26 ,浏览量:2

流程
    • 网页分析
    • 主要思路
    • 打印一下看看结果
    • 这是成果:
    • 以下是全部代码:

网页分析

节约时间,不废话介绍了,直接上例子!!! 我们就使用 requests 和 BeautifulSoup来写一个爬虫

作为一个爱看书的你(说的跟真的似的)在这里插入图片描述 怎么能发现好书呢? 所以我们学习 500 本好五星评书籍 怎么样? 在这里插入图片描述 ok 接下来就是学习 python 的正确姿势,请在电脑的陪同下边看本文边练习。

首先我们要对我们的目标网站进行分析先摸清对方的底我们才能战无不胜 在这里插入图片描述 打开这个书籍排行榜的地址 http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1 我们可以看到是这样的一个网页 在这里插入图片描述 每一页显示 20 本书当我们点击下一页的时候你可以发现地址变了 http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-2 也就是我们翻到第几页的时候,链接地址的最后一个参数会跟着变 那么我们等会在 python 中可以用一个变量,来实现获取不同页数的内容 在这里插入图片描述 接着操作来分析一下我们要的内容是怎么请求的,以及返回给我们的源代码是什么样的。

可以看到我们通过 GET 请求 在这里插入图片描述 我们的请求头 在这里插入图片描述 这是服务器返回来的数据 在这里插入图片描述 接着我们再来分析一下我们要抓取的关键信息 在这里插入图片描述 我们要的就是前 500 本书的 排名

书名

图片地址

作者

详情页

五星评分次数

价格

通过源码我们可以看到这些信息被放在了 li 标签中 在这里插入图片描述 那么我们等会就可以使用BeautifulSoup来进行过滤我们要的信息一顿分析完了之后接下来撸代码了。 在这里插入图片描述

主要思路

使用 page 变量来实现翻页 我们使用 requests 请求当当网 然后将返回的 HTML 进行BeautifulSoup解析 解析完之后就把内容存到文件中 在这里插入图片描述 请求当当网当我们请求成功之后拿到源代码 在这里插入图片描述 拿到源代码了就要对其解析使用BeautifulSoup获取我们想要的关键信息获取到了之后我们封装一下数据

打印一下看看结果

在这里插入图片描述 随后再把书的封面给下载下来,在这里插入图片描述

没毛病!!!获取完 500 本书的数据之后存到 当当图书.xlsx文件 在这里插入图片描述 完成,前 500 本书的数据就被我们拿到啦 在这里插入图片描述

这是成果:

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

以下是全部代码:
import requests
import csv
from bs4 import BeautifulSoup
from lxml import etree
import xlwt
import os.path
import re

def get_content(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}
    try:
        response = requests.get(url,headers)
        if response.status_code == 200:
            return response.text
    except requests.RequestException as e:
        print(e)
        return None

book = xlwt.Workbook(encoding='utf-8', style_compression=0)

sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True)
sheet.write(0, 0, '排名')
sheet.write(0, 1, '名称')
sheet.write(0, 2, '评论')
sheet.write(0, 3, '图片')
sheet.write(0, 4, '详情页')
sheet.write(0, 5, '价钱')
sheet.write(0, 6, '作者')

n = 1



def get_data(response):
    soup = BeautifulSoup(response,'lxml')
    all_list = soup.find(class_="bang_list clearfix bang_list_mode").find_all('li')
    item = {}
    for i in all_list:
        ranking = i.find('div').string
        title = i.find('div',class_="name").find('a').text
        pf = i.find('div',class_="biaosheng").find('span').string
        Images = i.find('a').find('img').get('src')
        ditail = i.find('a').get('href')
        monmy = i.find('p').find('span',class_="price_n").string.strip('¥')
        if i.find(class_="publisher_info").find('a') is not None:   # 处理没有找到相应标签的 并继续执行下去
            aoter = i.find(class_="publisher_info").find('a').text
        else:
            aoter = 'NOT AVAILABLE'
        print('爬取===>','\n' + ranking,'\n',title,'\n',pf,'\n',Images,'\n',ditail,'\n',monmy,'\n',aoter)

        save_Images(Images,title)
        save_csv(ranking,title,pf,Images,ditail,monmy,aoter)


def save_csv(ranking,title,pf,Images,ditail,monmy,aoter):
    global n
    sheet.write(n, 0, ranking)
    sheet.write(n, 1, title)
    sheet.write(n, 2, pf)
    sheet.write(n, 3, Images)
    sheet.write(n, 4, ditail)
    sheet.write(n, 5, monmy)
    sheet.write(n, 6, aoter)
    n = n + 1



def save_Images(Images,title):
    if not os.path.exists('当当图片'):
        os.mkdir('当当图片')
    big = '[?|"/\:]'
    new_title = re.sub(big,"",title)
    image_data = requests.get(Images).content
    with open('当当图片\\' + new_title + '.jpg',mode='wb')as f:
        f.write(image_data)
        print('正在保存图片:',title)



def main(page):
    url = 'http://bang.dangdang.com/books/fivestars/1-' + str(page)
    print(f'=========================================正在爬取第{page}页的数据============================================')
    response = get_content(url)
    get_data(response)


if __name__ == '__main__':
    for i in range(1,26):
        main(i)
book.save(u'当当图书.xlsx')

友们你们支持是我最大的动力。

关注
打赏
1650950381
查看更多评论
立即登录/注册

微信扫码登录

0.0374s