库需求

  • requests(对网站发起请求)
  • beautifulsoup(提取html信息)
  • re(正则表达式)
  • fake_useragent(生成假的请求头)
  • xlwt(处理excel文档)

准备

打开豆瓣Top250书籍网站https://book.douban.com/top250,观察其html特点,找到储存书本信息的位置。


代码

import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import re
import xlwt
ua=UserAgent()#生成假的请求头def getBooks(page):if page==0:url='https://book.douban.com/top250'else:url='https://book.douban.com/top250'+'?start='+str(page*25) #根据top250的网站url特点进行循环构造try:user_agent = ua.randomres = requests.get(url,headers={'User-Agent': user_agent})#利用假的请求头进行请求,以提高爬虫成功率html=res.textres.raise_for_status()   # 如果返回的状态码不是200, 则抛出异常;res.encoding = res.apparent_encoding  # 判断网页的编码格式, 便于respons.text知道如何解码;except Exception as e:print("爬取错误")html=res.textreturn htmldef processHtml(html):soup=BeautifulSoup(html,"html.parser")return soupdef getTitle(soup):lists=soup.find_all('div',class_="pl2")#找到储存书籍标题的部分titles=[]for item in lists:url=item.find('a').get('title')titles.append(url)#在列表的尾部添加一个元素,达到扩充列表的目的return titles#返回主页每一本书对应的题目def getUrls(soup):lists=soup.find_all('div',class_="pl2")urls=[]for item in lists:url=item.find('a').get('href')#寻找每一本书对应的网址urls.append(url)#在列表的尾部添加一个元素,达到扩充列表的目的return urls#返回主页每一本书对应的网址def getBasicMessage(soup):lists=soup.find_all('p',class_="pl")messages=[]for item in lists:message=item.string #只提取字符串部分,滤去标签messages.append(message)return messagesdef getStars(soup):lists=soup.find_all('span',class_="rating_nums")stars=[]for item in lists:star=float(item.string)#只提取字符串,并将评分转化为浮点数形式stars.append(star)return starsdef getPeopleNumbers(soup):lists=soup.find_all('span',class_="pl")peoples=[]for item in lists:people=item.textpeoples.append(people)num = []for i in peoples:r = re.findall(r"\d+\.?\d*",i)#提取字符串中数字的正则表达式num.append(int(r[0]))#将字符串转化为整数return numif __name__ == '__main__':book=xlwt.Workbook(encoding='utf-8')#设置文档的编码格式为utf-8sheet=book.add_sheet('豆瓣图书Top250')#建立excel工作簿sheet.write(0,0,'名称')#在excel中写入标题sheet.write(0,1,'网址')sheet.write(0,2,'基本信息')sheet.write(0,3,'评分')sheet.write(0,4,'人数')for i in range (0,10):#爬取十个页面(top1-top250)print('爬取第%d页的数据'%(i+1))html=getBooks(i)soup=processHtml(html)list1=getTitle(soup)list2=getUrls(soup)list3=getBasicMessage(soup)list4=getStars(soup)list5=getPeopleNumbers(soup)for n in range (0,25):#将每个页面中每一本书的信息写入excel中print('爬取第%d本书'%(i*25+n+1))sheet.write(i*25+n+1,0,list1[n])sheet.write(i*25+n+1,1,list2[n])sheet.write(i*25+n+1,2,list3[n])sheet.write(i*25+n+1,3,list4[n])sheet.write(i*25+n+1,4,list5[n])book.save(u'豆瓣最受欢迎的250本书.xls')#保存文件,注意不能是xlsxprint("爬取完毕")

效果

Python爬取豆瓣top250书籍(beautifulsoup法)相关推荐

  1. Python爬取豆瓣Top250电影中2000年后上映的影片信息

    Python爬取豆瓣Top250电影中2000年后上映的影片信息 前言 双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310.双十一当天打开看了下399,还得去抢满300减10 ...

  2. Python爬取豆瓣Top250电影可见资料并保存为excel形式

    Python爬取豆瓣Top250电影可见资料并保存为excel形式 利用requests第三方库实现网页的元素爬取,再使用openpyxl库进行信息的录入. 具体思路 1.分析网页的headers. ...

  3. python爬取豆瓣TOP250生成Excel表格例子最新

    一 确定爬取网站 因为初学,所以按照网上的教程爬取豆瓣TOP250的网站.网址: https://movie.douban.com/top250 二 编写爬虫程序 详细过程就不再一 一讲解,可以看代码 ...

  4. python爬取豆瓣top250信息并存入数据库中 | sqlite3

    文章目录 代码: 遇到的问题: 1.关于数据库表格中出现:NBSP 2. 为什么HTML字段中会出现&NBSP? 3.java.io.IOException: 不能删除数据库文件 4. 关于d ...

  5. Python爬取豆瓣Top250电影排名

    # -*- codeing = utf-8 -*- # @Time: 2021/12/27 14:30 # @Author: 买欣怡 # @File: 7. spider-豆瓣.py # @Softw ...

  6. Python爬取豆瓣Top250的电影

    流程图如下: 爬取网页-解析网页-存储数据到Excel和数据库中 源代码如下: 如果被豆瓣封Ip(一般被封第二天就解封了),可以自己设置代理Ip,或者自己登录账号后将Cookie放到header中. ...

  7. python爬取豆瓣高分书籍信息(request+xpath)

    复习了xpath,感觉还是熟悉的感觉.上次爬了微博爬了贴吧,这次就用xpath爬个豆瓣图书数据,作为学习时间序列的数据吧! 面向对象编程爬取 1.把自己要做的事情分类 #获取url的规律组成url_l ...

  8. python爬取豆瓣TOP250电影

    按照小甲鱼的爬虫教程,再自己修改了一部分. 废话不多说,直接贴代码 import requests from bs4 import BeautifulSoup import redef open_ur ...

  9. python爬取豆瓣短评_Python爬取豆瓣指定书籍的短评

    Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...

  10. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

最新文章

  1. 多gpu训练梯度如何计算,求和是否要求平均
  2. LayerDate渲染多个class出现闪现问题的解决
  3. 8条腾讯的产品管理方式
  4. python多线程加锁异步处理装饰器
  5. java ssh 和mvc_[转]JAVA三大框架SSH和MVC
  6. python分割字符串输出_python字符串分割
  7. 为什么百度查到的ip地址和ipconfig查到的不同;详解公网Ip和私网ip; 网络分类ABC类;
  8. 百度EasyDL深度学习实战营,免费教你转型AI工程师!
  9. ffice 2016 文件运行excel的数据透视表中的数据切片器的时候自动关闭
  10. 油猴脚本Tampermonkey初体验
  11. 普通摄像头游戏——飞翔
  12. H3C 100F防火墙限速
  13. android+gps+定位+缓存,Android GPS和Network定位
  14. JAVA优秀开源框架收集
  15. UE编辑器加入鼠标右键
  16. 最全SSH命令 - 11种用法
  17. 决策树:ID3C4.5cart算法(从原理到实现-小白教程超详细)
  18. Matlab 统计不同元素个数
  19. 《AngularJS深度剖析与最佳实践》一2.12 单元测试
  20. 平面设计常见的配色方案及色标

热门文章

  1. 两个网段计算机如何共享打印机,不同网段的打印机共享怎么连接?具体步骤
  2. 阿里行癫分享“从技术支撑业务、技术赋能业务,到技术创建新商业”
  3. html科学计算器,很剽悍的在线科学计算器
  4. MT管理系去弹窗【失败】
  5. 微信小程序-canvas 2d带动画的半圆形刻度进度条
  6. App Store Connect 等待协议
  7. Android 阶段性开发学习知识点(自用)
  8. MyEclipse断点无效
  9. CDH集群更换ip,主机名
  10. 解决安装 Bun 之后出现 zsh compinit: insecure directories, run compaudit for list. Ignore insecure directorie