热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Python爬取豆瓣数据实现过程解析

这篇文章主要介绍了Python爬取豆瓣数据实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

代码如下

from bs4 import BeautifulSoup #网页解析,获取数据
import sys #正则表达式,进行文字匹配
import re
import urllib.request,urllib.error #指定url,获取网页数据
import xlwt #使用表格
import sqlite3
import lxml

以上是引用的库,引用库的方法很简单,直接上图:

上面第一步算有了,下面分模块来,步骤算第二步来:

这个放在开头

def main():
  baseurl ="https://movie.douban.com/top250?start="
  datalist = getData(baseurl)
  savepath=('douban.xls')
  saveData(datalist,savepath)

这个放在末尾

if __name__ == '__main__':
main()

不难看出这是主函数,里面的话是对子函数的调用,下面是第三个步骤:子函数的代码

对网页正则表达提取(放在主函数的后面就可以)

findLink = re.compile(r'') #创建正则表达式对象,表示规则(字符串的模式)
#影片图片
findImg = re.compile(r'',re.S)#re.S取消换行符
#影片片面
findtitle= re.compile(r'(.*?)')
#影片评分
fileRating = re.compile(r'(.*?)')
#找到评价的人数
findJudge = re.compile(r'(\d*)人评价')
#找到概识
findInq =re.compile(r'(.*?)')
#找到影片的相关内容
findBd = re.compile(r'

(.*?)

',re.S)

爬数据核心函数

def getData(baseurl):
  datalist=[]
  for i in range(0,10):#调用获取页面的函数10次
    url = baseurl + str(i*25)
    html = askURl(url)
  #逐一解析
    soup = BeautifulSoup(html,"html.parser")
    for item in soup.find_all('div',class_="item"):
    #print(item)
      data=[]
      item = str(item)
 
      link = re.findall(findLink,item)[0] #re库用来通过正则表达式查找指定的字符串
      data.append(link)
      titles =re.findall(findtitle,item)
      if(len(titles)==2):
        ctitle=titles[0].replace('\xa0',"")
        data.append(ctitle)#添加中文名
        otitle = titles[1].replace("\xa0/\xa0Perfume:","")
        data.append(otitle)#添加外国名
      else:
        data.append(titles[0])
        data.append(' ')#外国名字留空
 
      imgSrc = re.findall(findImg,item)[0]
      data.append(imgSrc)
 
      rating=re.findall(fileRating,item)[0]
      data.append(rating)
 
      judgenum = re.findall(findJudge,item)[0]
      data.append(judgenum)
 
      inq=re.findall(findInq,item)
      if len(inq) != 0:
        inq =inq[0].replace(".","")
        data.append(inq)
      else:
        data.append(" ")
      bd=re.findall(findBd,item)[0]
      bd=re.sub('(\s+)?'," ",bd) #去掉
bd =re.sub('\xa0'," ",bd) data.append(bd.strip()) #去掉前后的空格 datalist.append(data) #把处理好的一部电影信息放入datalist return datalist

获取指定网页内容

def askURl(url):
 
  head = {
    "User-Agent": "Mozilla / 5.0(Windows NT 10.0;WOW64) Apple"
    +"WebKit / 537.36(KHTML, likeGecko) Chrome / 78.0.3904.108 Safari / 537.36"
  }
#告诉豆瓣我们是浏览器我们可以接受什么水平的内容
  request = urllib.request.Request(url,headers=head)
  html=""
  try:
    respOnse= urllib.request.urlopen(request)
    html = response.read().decode("utf-8")
    # print(html)
  except urllib.error.URLError as e:
    if hasattr(e,"code"):
      print(e.code)
    if hasattr(e,"reason"):
      print(e.reason)
  return html

将爬下来的数据保存到表格中

ef saveData(datalist,savepath):
  print("保存中。。。")
  book = xlwt.Workbook(encoding="utf-8",style_compression=0) # 创建workbook对象
  sheet = book.add_sheet('douban',cell_overwrite_ok=True) #创建工作表 cell_overwrite_ok表示直接覆盖
  col = ("电影详情链接","影片中文网","影片外国名","图片链接","评分","评价数","概况","相关信息")
  for i in range(0,8):
    sheet.write(0,i,col[i])
  for i in range(0,250):
    print("第%d条" %(i+1))
    data = datalist[i]
    for j in range(0,8):
      sheet.write(i+1,j,data[j])
 
  book.save(savepath)

以上就是整个爬数据的整个程序,这仅仅是一个非常简单的爬取,如果想要爬更难的网页需要实时分析

整个程序代码

from bs4 import BeautifulSoup #网页解析,获取数据
import sys #正则表达式,进行文字匹配
import re
import urllib.request,urllib.error #指定url,获取网页数据
import xlwt #使用表格
import sqlite3
import lxml
 
def main():
  baseurl ="https://movie.douban.com/top250?start="
  datalist = getData(baseurl)
  savepath=('douban.xls')
  saveData(datalist,savepath)
#影片播放链接
findLink = re.compile(r'') #创建正则表达式对象,表示规则(字符串的模式)
#影片图片
findImg = re.compile(r'',re.S)#re.S取消换行符
#影片片面
findtitle= re.compile(r'(.*?)')
#影片评分
fileRating = re.compile(r'(.*?)')
#找到评价的人数
findJudge = re.compile(r'(\d*)人评价')
#找到概识
findInq =re.compile(r'(.*?)')
#找到影片的相关内容
findBd = re.compile(r'

(.*?)

',re.S) def getData(baseurl): datalist=[] for i in range(0,10):#调用获取页面的函数10次 url = baseurl + str(i*25) html = askURl(url) #逐一解析 soup = BeautifulSoup(html,"html.parser") for item in soup.find_all('div',class_="item"): #print(item) data=[] item = str(item) link = re.findall(findLink,item)[0] #re库用来通过正则表达式查找指定的字符串 data.append(link) titles =re.findall(findtitle,item) if(len(titles)==2): ctitle=titles[0].replace('\xa0',"") data.append(ctitle)#添加中文名 otitle = titles[1].replace("\xa0/\xa0Perfume:","") data.append(otitle)#添加外国名 else: data.append(titles[0]) data.append(' ')#外国名字留空 imgSrc = re.findall(findImg,item)[0] data.append(imgSrc) rating=re.findall(fileRating,item)[0] data.append(rating) judgenum = re.findall(findJudge,item)[0] data.append(judgenum) inq=re.findall(findInq,item) if len(inq) != 0: inq =inq[0].replace(".","") data.append(inq) else: data.append(" ") bd=re.findall(findBd,item)[0] bd=re.sub('(\s+)?'," ",bd) #去掉
bd =re.sub('\xa0'," ",bd) data.append(bd.strip()) #去掉前后的空格 datalist.append(data) #把处理好的一部电影信息放入datalist return datalist #得到指定一个url的网页内容 def askURl(url): head = { "User-Agent": "Mozilla / 5.0(Windows NT 10.0;WOW64) Apple" +"WebKit / 537.36(KHTML, likeGecko) Chrome / 78.0.3904.108 Safari / 537.36" } #告诉豆瓣我们是浏览器我们可以接受什么水平的内容 request = urllib.request.Request(url,headers=head) html="" try: respOnse= urllib.request.urlopen(request) html = response.read().decode("utf-8") # print(html) except urllib.error.URLError as e: if hasattr(e,"code"): print(e.code) if hasattr(e,"reason"): print(e.reason) return html def saveData(datalist,savepath): print("保存中。。。") book = xlwt.Workbook(encoding="utf-8",style_compression=0) # 创建workbook对象 sheet = book.add_sheet('douban',cell_overwrite_ok=True) #创建工作表 cell_overwrite_ok表示直接覆盖 col = ("电影详情链接","影片中文网","影片外国名","图片链接","评分","评价数","概况","相关信息") for i in range(0,8): sheet.write(0,i,col[i]) for i in range(0,250): print("第%d条" %(i+1)) data = datalist[i] for j in range(0,8): sheet.write(i+1,j,data[j]) book.save(savepath) if __name__ == '__main__': main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 可转债数据智能抓取与分析平台优化
    本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ... [详细]
  • 【Python爬虫实操】 不创作小说,专精网站内容迁移,超高效!(含源代码)
    本文详细介绍了如何利用Python爬虫技术实现高效网站内容迁移,涵盖前端、后端及Android相关知识点。通过具体实例和源代码,展示了如何精准抓取并迁移网站内容,适合对Python爬虫实战感兴趣的开发者参考。 ... [详细]
  • 代码:headersAccept:texthtml,applicationxhtml+xml,applicationxml;q0.9,imagewebp,image ... [详细]
  • (1)搜狗搜索人物实战 importrequestsurlhttps:www.sogou.comweb?query李荣浩 #首先我们需要观察在搜狗输入李 ... [详细]
  • 在前一篇文章中,我们介绍了如何使用Requests库发送GET请求。本文将深入探讨如何通过Requests库发送POST请求,包括参数格式、请求封装等关键技巧,并通过“历史上的今天”API实例进行详细说明。 ... [详细]
  • 本文提供了在Windows系统上部署和启动MySQL免安装版本的详细步骤。首先,从MySQL官方网站下载社区版免安装包(https://dev.mysql.com/downloads/mysql/8.0.html),将其解压至指定目录,例如D:\tools\mysql。接着,配置系统环境变量,确保MySQL命令行工具可以在任意路径下使用。此外,还需创建并配置my.ini文件以设置MySQL的基本参数,确保数据库服务能够顺利启动和运行。 ... [详细]
  • CSS中的pointer-events属性详解与应用
    在CSS中,`pointer-events`属性是一个非常实用但常被忽视的功能。它主要用于控制元素是否响应鼠标事件。当一个元素覆盖在其他元素之上时,通过设置`pointer-events`属性,可以决定该元素是否能够接收鼠标点击、悬停等交互操作,从而实现更灵活的用户界面设计。例如,将`pointer-events`设置为`none`可以使元素透明地传递鼠标事件,方便实现复杂的叠加效果和交互逻辑。 ... [详细]
  • 软件测试工程师必备:全面解析Web应用的浏览器兼容性测试方法与工具
    随着市场上浏览器种类的不断增多,特别是在平板和移动设备上的普及,确保网站在各种浏览器中都能正常运行变得尤为重要。本文将深入探讨Web应用的浏览器兼容性测试方法与工具,帮助软件测试工程师全面掌握这一关键技能,以提高应用的用户体验和可靠性。 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • 深入浅出解析HTTP协议的核心功能与应用
    前言——协议是指预先设定的通信规则,确保双方能够按照既定标准进行有效沟通,从而实现准确的信息交换。例如,驯兽师通过拍手使动物坐下,这实际上是一种预设的协议。本文将详细探讨HTTP协议的核心功能及其广泛应用,解析其在现代网络通信中的重要作用。 ... [详细]
  • 本文详细解析了如何利用Appium与Python在真实设备上执行测试示例的方法。首先,需要开启手机的USB调试功能;其次,通过数据线将手机连接至计算机并授权USB调试权限。最后,在命令行工具中验证设备连接状态,确保一切准备就绪,以便顺利进行测试。 ... [详细]
  • 定义Function类型:1functionsum(num1,num2){return num1+num2;}2varsumfunction(num1,num2){returnn ... [详细]
  • 开发工具WebDeveloper1.1.8https:addons.mozilla.orgen-USfirefoxaddon60以工具栏的形式对网页的(X)HTML、脚本、多媒体、 ... [详细]
  • CSS深入剖析text和column
    这里写目录标题一、text-shadow二、font-face三、其他text常用特性四、column一、text-shadow与box-shadow类似,这里通过 ... [详细]
  • 想爬取微博的评论,看了很多代码都是要用到这个链接,可是为什么找不到show?id这条,而是https://m.weibo.cn/comments/hotflow?id=这条呢,有没有大佬帮忙解疑 ... [详细]
author-avatar
手机用户上官婉儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有