【XMU学科实践二】豆瓣爬虫实践

叠甲:仅供学习。。
XMU的小朋友实在不会了可以参考我的思路,但还是建议自己敲一遍哈。
学科实践二还是挺有意思的!

分析豆瓣阅读网站

豆瓣阅读出版页面


打开浏览器开发者工具,可以看到如下图所示的内容

获取豆瓣cookie

打开网站https://read.douban.com/provider/all,登录后按F12
在这里插入图片描述
按Ctrl+R、复制Cookie中的所有内容,替换到代码里的对应位置
在这里插入图片描述

完整爬虫代码

我23年3月的时候,是把豆瓣全部爬取了()一共5w6k条
在这里插入图片描述

import sys
import numpy as np
import json
import re
import requests
import pandas as pd
import datetime
from bs4 import BeautifulSoup
import os
headers = { 
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }
url='https://read.douban.com/provider/all'       
# 更换为自己的cookie              
cookie={'你的Cookie'}
try:
    response = requests.get(url,headers=headers,cookies=cookie)
    #将一段文档传入BeautifulSoup的构造方法,就能得到一个文档的对象, 可以传入一段字符串
    soup = BeautifulSoup(response.text,'lxml')  
    
    #返回所有的<div>所有标签
    publishes = soup.find_all('div',{'class':'provider-group'})
    pbs=[]
    item_list=[]
    #enumerate爬虫中的遍历
    #遍历所有出版社
    #pb为当前出版社
    for index,pb in enumerate(publishes):
        #if (index<=1):
        if True:
            pb_list={}
            pb_list['item_name']=pb.find_next('div').text
            p=pb.find_next('ul')
            li_s=p.find_all('li')#li_s存储了当前出版社的所有数据。
            
        #print(li_s)
        book_name=[]
        book_value=[]
        for li in li_s:
            item_li={}
            #item_li为进入当前出版社内页书单的链接
            item_li['href']='https://read.douban.com'+li.find_next('a').get('href')

            url2=item_li['href']
            response2=requests.get(url2,headers=headers,cookies=cookie)
            soup2 = BeautifulSoup(response2.text,'lxml')  
            
            #遍历当前出版社的所有书单页面
            while soup2.find('li',class_='next')!=None:
                #booklist为当前页面的所有<div class=info>的书籍数据
                booklist=soup2.find_all('div',{'class':'info'})
                #print(publishes2)
                #遍历当前页面的所有书籍
                #book为当前的书籍数据
                for book in booklist:
                    
                    if(book.find('h4',class_='title')==None):
                        continue
                    title =book.find('h4',class_='title').text
                    item_li['name']=title
                    if(book.find('div',class_='sales-price')!=None):
                        price=book.find('div',class_='sales-price').text
                        item_li['price']=price
                    elif(book.find('span',class_='discount-price')!=None):
                        price=book.find('span',class_='discount-price').text
                        item_li['price']=price
                    elif(book.find('span',class_='price-tag')!=None):
                        price=book.find('span',class_='price-tag').text
                        item_li['price']=price
                    else:
                        continue
                    #输出查看
                    print(f"《{title}》:{price}")#1000行截断,保存成xlsx比较好
                    #item_list用来存储要求得的书名和价格的list型数据结构,一维
                    item_list.append([title,price])
                temp2=soup2.find('li',class_='next')
                #若存在后页
                if temp2.find('a')!=None:
                    #跳转到下一页
                    url3=url2+temp2.find('a').get('href')
                    response2=requests.get(url3,headers=headers,cookies=cookie)
                    soup2 = BeautifulSoup(response2.text,'lxml') 
                else:
                    break
                
    df=pd.DataFrame(item_list)
    df.columns=['书籍名称','价格']
    print(df)
    #保存到excel文件中
    df.to_excel("爬虫数据.xlsx")
except Exception as e:
    print(e)

  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

快苏排序OAO

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

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

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

打赏作者

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

抵扣说明:

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

余额充值