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

文章目录

  • 分析豆瓣阅读网站
  • 完整爬虫代码

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

分析豆瓣阅读网站

豆瓣阅读出版页面


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

完整爬虫代码

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

import sys
import numpy as np
sys.path.append('/home/aistudio/external-libraries')
import json
import re
import requests
import pandas as pd
import datetime
from bs4 import BeautifulSoup
import base64
import os
import random
import time
#代理池
proxy_list = ['127.0.0.1:15732',   #自己的代理服务器地址'192.168.56.1.15732'  
]
proxy = random.choice(proxy_list)
proxies = {
'http':  proxy,
'https':  proxy,
}
user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0']
headers = { 'User-Agent': random.choice(user_agents),
}
url='https://read.douban.com/provider/all'                     
cookie={'cookie':'bid=kRRUP5Adrsc; _ga=GA1.3.1583431493.1679359048; _gid=GA1.3.240421151.1679359048; _ga=GA1.1.1583431493.1679359048; page_style="mobile"; dbcl2="215291240:+lGgZ069L0g"; _pk_ses.100001.a7dd=*; ck=AT7V; _ga_RXNMP372GL=GS1.1.1679406549.4.1.1679408190.60.0.0; _pk_id.100001.a7dd=0f38c905a23f4f70.1679359049.4.1679408190.1679402067.; _gat=1'}
try:response = requests.get(url,headers=headers,cookies=cookie,proxies=proxies)#将一段文档传入BeautifulSoup的构造方法,就能得到一个文档的对象, 可以传入一段字符串soup = BeautifulSoup(response.text,'lxml')  #返回所有的<div>所有标签publishes = soup.find_all('div',{'class':'provider-group'})pbs=[]item_list=[]#print(publishes)#enumerate爬虫中的遍历#遍历所有出版社#pb为当前出版社for index,pb in enumerate(publishes):#if (index<=1):if True:pb_list={}pb_list['item_name']=pb.find_next('div').textp=pb.find_next('ul')li_s=p.find_all('li')#li_s存储了当前出版社的所有数据。#print(li_s)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,proxies=proxies)soup2 = BeautifulSoup(response2.text,'lxml')  #遍历当前出版社的所有书单页面while soup2.find('li',class_='next')!=None:#booklist为当前页面的所有<div class=info>的书籍数据booklist=soup2.find_all('div',{'class':'info'})#print(booklist)#print(publishes2)#遍历当前页面的所有书籍#book为当前的书籍数据for book in booklist:if(book.find('h4',class_='title')==None):continuetitle =book.find('h4',class_='title').textitem_li['name']=titleif(book.find('div',class_='sales-price')!=None):price=book.find('div',class_='sales-price').textitem_li['price']=priceelif(book.find('span',class_='discount-price')!=None):price=book.find('span',class_='discount-price').textitem_li['price']=priceelif(book.find('span',class_='price-tag')!=None):price=book.find('span',class_='price-tag').textitem_li['price']=priceelse:continue#输出查看print(f"《{title}》:{price}")#1000行截断,保存成xlsx比较好#item_list用来存储要求得的书名和价格的list型数据结构,一维item_list.append([title,price])t = random.random() #随机大于0 且小于1 之间的小数time.sleep(t)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,proxies=proxies)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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/535843.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK默认的垃圾回收器是什么?

在不同版本的Java开发工具包&#xff08;JDK&#xff09;中&#xff0c;JDK默认的垃圾回收器可能会有所不同。然而&#xff0c;自从Java 9发布后&#xff0c;G1&#xff08;Garbage-First&#xff09;垃圾回收器成为了Java平台的默认垃圾回收器。在此之前&#xff0c;Java 8及之…

php apache 后台超时设置

最近在写一个thinkphp项目的时候&#xff0c;发现Ajax从后端请求数据时间比较长&#xff0c;大概需要45秒左右&#xff0c;但是一旦请求时间超过40s&#xff0c;页面就会超时500了&#xff0c;一开始以为是ajax请求时间不能太长&#xff0c;后来将Ajax请求改为同步且timeout设置…

Navicat操作MYSQL

Navicat操作MYSQL 数据表的操作-创建表数据表的操作-修改、删除表数据的操作数据类型与约束常用数据类型数据约束 数据库备份与还原数据库的备份数据表的还原 数据表的操作-创建表 数据表的操作-修改、删除表 数据的操作 数据类型与约束 常用数据类型 整型&#xff1a;int 有符…

JVM 类的加载篇

我们都知道一个类从加载到卸载一共分为七个过程 加载 - 链接(验证 - 准备 - 解析) - 初始化 - 使用 - 卸载 下文我们将详细解析这些过程 谁需要加载? 在Java中数据类型分为基本数据类型和引用数据类型,基本数据类型由虚拟机预定义,引用数据类型则需要类的加载 1.加载/装载(loa…

智慧城市大模型来啦!港大百度推出UrbanGPT

论文作者解读链接&#xff1a;https://blog.csdn.net/qq_42715656/article/details/136681839 项目链接&#xff1a;https://urban-gpt.github.io/ 代码链接&#xff1a;https://github.com/HKUDS/UrbanGPT 论文链接&#xff1a;https://arxiv.org/abs/2403.00813 研究实验室链…

【Linux】Shell编程【二】

目录 Shell流程控制条件测试注意事项示例[ condition ]与[[ condition ]]的区别 if条件单分支语法示例1&#xff1a;统计根分区使用率示例2&#xff1a;创建目录 双分支if条件语句语法案例1&#xff1a;备份mysql数据库案例2&#xff1a;判断apache是否启动&#xff0c;如果没有…

力扣刷题日记——L238.除自身以外数组的乘积

1. 前言 今天是力扣刷题的第三天啊&#xff0c;必须上点难度&#xff0c;不然太简单都容易刷腻了。题型依旧是数组类型&#xff0c;经过这几道数组类型的洗礼渐渐摸出点门道来了&#xff0c;给大家分享一下心得体会&#xff0c;下面就进入正题。 2. 题目描述 给你一个整数数…

APP2:android studio如何使用lombok

一、前言 不知道从哪个版本开始&#xff0c;android studio便无法在plugins中下载lombok了&#xff0c;有人说是内置了&#xff0c;好像有这么回事儿。我主要面临如下两个问题&#xff1a; 使用内置lombok&#xff0c;可以自动生成setter、setter、toString等。但是&#xff0…

【项目笔记】java微服务:黑马头条(day02)

文章目录 app端文章查看&#xff0c;静态化freemarker,分布式文件系统minIO1)文章列表加载1.1)需求分析1.2)表结构分析1.3)导入文章数据库1.3.1)导入数据库1.3.2)导入对应的实体类 1.4)实现思路1.5)接口定义1.6)功能实现1.6.1)&#xff1a;导入heima-leadnews-article微服务&am…

思科网络中如何进行动态NAT配置

一、什么是动态NAT&#xff1f;动态NAT与静态NAT的区别是什么&#xff1f; &#xff08;1&#xff09;动态NAT&#xff08;Network Address Translation&#xff09;是一种网络地址转换技术&#xff0c;它会动态地将内部私有网络中的局域网IP地址映射为公共IP地址&#xff0c;…

ISIS单区域实验简述

ISIS 中间系统到中间系统&#xff0c;也是链路状态协议&#xff0c;工作在数据链路层&#xff0c;不依赖IP地址&#xff1b;与OSPF一样采用最短路径SPF算法&#xff0c;收敛速度快。 实验基础配置&#xff1a; r1: sys sysname r1 undo info enable int g0/0/0 ip add 12.1.1.1…

优秀的前端框架vue,原理剖析与实战技巧总结【干货满满】

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属的专栏&#xff1a;前端零基础教学&#xff0c;实战进阶 景天的主页&#xff1a;景天科技苑 文章目录 Vuevue.js库的基本使用vue.js的M-V-VM思…