网址:豆瓣电影 Top 250


目录

一.bs4和re正则爬取

二.xpath爬取


一.bs4和re正则爬取

源代码:

import urllib.request,urllib.error
import re
from bs4 import BeautifulSoup
import xlwtbaseurl = "https://movie.douban.com/top250?start="
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}title = re.compile('<span class="title">(.*?)</span>')  #标题
link = re.compile('<a class="" href="(.*?)"')  #电影链接
introduction = re.compile('<span class="inq">(.*?)</span>')  #电影简介
appraise = re.compile('<span>(.*?)</span>')  #评价人数
basedata = []  #最后写入到excel中,利用列表来写入
workbook = xlwt.Workbook(encoding='utf-8')  #新建excel文档
worksheet = workbook.add_sheet('daoban')  #excel文档中添加表格for i in range(0,10):url = url = baseurl+str(i*25)#请求网页request = urllib.request.Request(url=url,headers=head)#得到网页回应并打开response = urllib.request.urlopen(request)#对打开的网页回应并解码到utf-8(有中文)html = response.read().decode("utf-8")# print(html)  #字符类型的htmlsoup = BeautifulSoup(html,"html.parser")  #后面是html。parser 解析器for item in soup.find_all('div',class_="info"):item = str(item)data = []  #每一部电影有多个,每部电影放入一个列表中ftitle = re.findall(title,item)if len(ftitle) == 2:etitle = ftitle[0]data.append(etitle)rtitle = ftitle[1].replace("/","")#去点无关符号data.append(rtitle)else:data.append(ftitle[0])data.append(' ')#外国名留空  #有的会没有外国电影,防止串行flink = re.findall(link,item)[0]data.append(flink)# print(data)# fintroduction = re.findall(introduction,item)[0]#有的电影没有概述fintroduction = re.findall(introduction, item)if len(fintroduction) != 0:fintroduction = fintroduction[0].replace("。","")#取代最后面的句号data.append(fintroduction)else:data.append(" ")data.append(fintroduction)fappraise = re.findall(appraise,item)[0]data.append(fappraise)basedata.append(data)  #单个电影信息的列表加入到一个大列表中for i in range(0,250):print("第%d条记录"%i)first = basedata[i]for j in range(0,4):second = first[j]worksheet.write(i,j,second)  #每个列表中保存数据workbook.save('豆瓣.xls')  #保存excel文档print(basedata)

1.请求网页并且获取网页源代码的代码实现:

import urllib.request,urllib.errorbaseurl = "https://movie.douban.com/top250?start="
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}#for循环来进行页面跳转
for i in range(0,10):url = url = baseurl+str(i*25)#请求网页request = urllib.request.Request(url=url,headers=head)#得到网页回应并打开response = urllib.request.urlopen(request)#对打开的网页回应并解码到utf-8(有中文)html = response.read().decode("utf-8")# print(html)

2.对拿到的源代码的取其中的想要的电影标题,链接等

import urllib.request,urllib.error
import re
from bs4 import BeautifulSoupbaseurl = "https://movie.douban.com/top250?start="
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}title = re.compile('<span class="title">(.*?)</span>')  #标题
link = re.compile('<a class="" href="(.*?)"')  #电影链接
introduction = re.compile('<span class="inq">(.*?)</span>')  #电影简介
appraise = re.compile('<span>(.*?)</span>')  #评价人数
basedata = []  #最后写入到excel中,利用列表来写入for i in range(0,10):url = url = baseurl+str(i*25)#请求网页request = urllib.request.Request(url=url,headers=head)#得到网页回应并打开response = urllib.request.urlopen(request)#对打开的网页回应并解码到utf-8(有中文)html = response.read().decode("utf-8")# print(html)  #字符类型的htmlsoup = BeautifulSoup(html,"html.parser")  #后面是html。parser 解析器for item in soup.find_all('div',class_="info"):item = str(item)data = []  #每一部电影有多个,每部电影放入一个列表中ftitle = re.findall(title,item)if len(ftitle) == 2:etitle = ftitle[0]data.append(etitle)rtitle = ftitle[1].replace("/","")#去点无关符号data.append(rtitle)else:data.append(ftitle[0])data.append(' ')#外国名留空  #有的会没有外国电影,防止串行flink = re.findall(link,item)[0]data.append(flink)# print(data)# fintroduction = re.findall(introduction,item)[0]#有的电影没有概述fintroduction = re.findall(introduction, item)if len(fintroduction) != 0:fintroduction = fintroduction[0].replace("。","")#取代最后面的句号data.append(fintroduction)else:data.append(" ")data.append(fintroduction)fappraise = re.findall(appraise,item)[0]data.append(fappraise)basedata.append(data)  #单个电影信息的列表加入到一个大列表中print(basedata)

3.对拿到的数据写道excle当中

import urllib.request,urllib.error
import re
from bs4 import BeautifulSoup
import xlwtbaseurl = "https://movie.douban.com/top250?start="
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}title = re.compile('<span class="title">(.*?)</span>')  #标题
link = re.compile('<a class="" href="(.*?)"')  #电影链接
introduction = re.compile('<span class="inq">(.*?)</span>')  #电影简介
appraise = re.compile('<span>(.*?)</span>')  #评价人数
basedata = []  #最后写入到excel中,利用列表来写入
workbook = xlwt.Workbook(encoding='utf-8')  #新建excel文档
worksheet = workbook.add_sheet('daoban')  #excel文档中添加表格for i in range(0,10):url = url = baseurl+str(i*25)#请求网页request = urllib.request.Request(url=url,headers=head)#得到网页回应并打开response = urllib.request.urlopen(request)#对打开的网页回应并解码到utf-8(有中文)html = response.read().decode("utf-8")# print(html)  #字符类型的htmlsoup = BeautifulSoup(html,"html.parser")  #后面是html。parser 解析器for item in soup.find_all('div',class_="info"):item = str(item)data = []  #每一部电影有多个,每部电影放入一个列表中ftitle = re.findall(title,item)if len(ftitle) == 2:etitle = ftitle[0]data.append(etitle)rtitle = ftitle[1].replace("/","")#去点无关符号data.append(rtitle)else:data.append(ftitle[0])data.append(' ')#外国名留空  #有的会没有外国电影,防止串行flink = re.findall(link,item)[0]data.append(flink)# print(data)# fintroduction = re.findall(introduction,item)[0]#有的电影没有概述fintroduction = re.findall(introduction, item)if len(fintroduction) != 0:fintroduction = fintroduction[0].replace("。","")#取代最后面的句号data.append(fintroduction)else:data.append(" ")data.append(fintroduction)fappraise = re.findall(appraise,item)[0]data.append(fappraise)basedata.append(data)  #单个电影信息的列表加入到一个大列表中for i in range(0,250):print("第%d条记录"%i)first = basedata[i]for j in range(0,4):second = first[j]worksheet.write(i,j,second)  #每个列表中保存数据workbook.save('豆瓣.xls')  #保存excel文档print(basedata)

二.xpath爬取


这个我自己使用了几次,好像相比上面那个,更容易被拉黑,谨慎使用吧。

ps:1.好像加上time.sleep(1)可以减缓爬取速度并且不容易被拉黑(需要(import time)导入包)

2.请求打开网页最后要关闭网页(requ.close())

源代码:

import requests
from lxml import etree
import xlwt
workbook = xlwt.Workbook(encoding='utf-8')  #新建一个excel文档
worksheet = workbook.add_sheet('daoban')
data = []       #需要把所有数据放在一个列表中,然后再写入到excel中
baseurl = "https://movie.douban.com/top250?start="
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40"}
for i in range(0,10):changeurl = baseurl + str(25*i)requ = requests.get(url=changeurl,headers=head)  #请求网页数据html1 = requ.text  #拿到字符类型的网页源代码html = etree.HTML(html1)  #转换成可以使用xpath的类型div = html.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li')print(html1)try:for item in div:basedata = []  #要把每一部电影的各个信息分开保存,且一个电影为一个小列表ftitle = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]  #最后加上text()来获取到文本内容,再加[0]放入列表第一个元素basedata.append(ftitle)flink = item.xpath('./div/div[2]/div[1]/a/@href')[0]  #最后加上/@href是取节点<a中的href中的内容basedata.append(flink)fintroduction = item.xpath('./div/div[2]/div[2]/p[2]/span/text()')  #不是所有的都有简介,所以给一个判断看是否存在,不存在的时候添加空格来占个位置if len(fintroduction) != 0:basedata.append(fintroduction)else:basedata.append(' ')basedata.append(fintroduction)data.append(basedata)except(IndexError) as e:passrequ.close()
# 上面把250条记录都保存再同一个列表中,现在写入到excel
for i in range(0,250):first = data[i]for j in range(0,3):second = first[j]worksheet.write(i,j,second)workbook.save('豆瓣T250.xls')print(data)

1.请求网页并且获取网页源代码的代码实现:

import requests
baseurl = "https://movie.douban.com/top250?start="
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40"}
for i in range(0,10):changeurl = baseurl + str(25*i)requ = requests.get(url=changeurl,headers=head)  #请求网页数据html1 = requ.text  #拿到字符类型的网页源代码#print(html1)  #检查是否拿到了源代码

2.对拿到的源代码的取其中的想要的电影标题,链接等

import requests
from lxml import etree
data = []       #需要把所有数据放在一个列表中,然后再写入到excel中
baseurl = "https://movie.douban.com/top250?start="
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40"}
for i in range(0,10):changeurl = baseurl + str(25*i)requ = requests.get(url=changeurl,headers=head)  #请求网页数据html1 = requ.text  #拿到字符类型的网页源代码html = etree.HTML(html1)  #转换成可以使用xpath的类型div = html.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li')print(html1)try:for item in div:basedata = []  #要把每一部电影的各个信息分开保存,且一个电影为一个小列表ftitle = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]  #最后加上text()来获取到文本内容,再加[0]放入列表第一个元素basedata.append(ftitle)flink = item.xpath('./div/div[2]/div[1]/a/@href')[0]  #最后加上/@href是取节点<a中的href中的内容basedata.append(flink)fintroduction = item.xpath('./div/div[2]/div[2]/p[2]/span/text()')  #不是所有的都有简介,所以给一个判断看是否存在,不存在的时候添加空格来占个位置if len(fintroduction) != 0:basedata.append(fintroduction)else:basedata.append(' ')basedata.append(fintroduction)data.append(basedata)except(IndexError) as e:pass  #这里使用try excep 异常处理是有的简介之类的没有,添加如上的判读之后就可以不用写try了requ.close()print(data)  #检查是否拿到了想要的数据

3.对拿到的数据写道excle当中

import requests
from lxml import etree
import xlwt
workbook = xlwt.Workbook(encoding='utf-8')  #新建一个excel文档
worksheet = workbook.add_sheet('daoban')
data = []       #需要把所有数据放在一个列表中,然后再写入到excel中
baseurl = "https://movie.douban.com/top250?start="
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40"}
for i in range(0,10):changeurl = baseurl + str(25*i)requ = requests.get(url=changeurl,headers=head)  #请求网页数据html1 = requ.text  #拿到字符类型的网页源代码html = etree.HTML(html1)  #转换成可以使用xpath的类型div = html.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li')print(html1)try:for item in div:basedata = []  #要把每一部电影的各个信息分开保存,且一个电影为一个小列表ftitle = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]  #最后加上text()来获取到文本内容,再加[0]放入列表第一个元素basedata.append(ftitle)flink = item.xpath('./div/div[2]/div[1]/a/@href')[0]  #最后加上/@href是取节点<a中的href中的内容basedata.append(flink)fintroduction = item.xpath('./div/div[2]/div[2]/p[2]/span/text()')  #不是所有的都有简介,所以给一个判断看是否存在,不存在的时候添加空格来占个位置if len(fintroduction) != 0:basedata.append(fintroduction)else:basedata.append(' ')basedata.append(fintroduction)data.append(basedata)except(IndexError) as e:passrequ.close()
# 上面把250条记录都保存再同一个列表中,现在写入到excel
for i in range(0,250):first = data[i]for j in range(0,3):second = first[j]worksheet.write(i,j,second)workbook.save('豆瓣T250.xls')print(data)

PS:单独的新建excel文档,写入内容并保存的代码实现

import xlwtworkbook = xlwt.Workbook(encoding='utf-8')  #新建一个excel文档
worksheet = workbook.add_sheet('daoban')   #excel中新建单个表格名字为:douban
worksheet.write(5,4,hello python)   #在表格中的第(5,4)位置添加内容:hello python
workbook.save('hello.xls')  #保存excel文档的名字为hello.xls

python爬取豆瓣T250电影及保存excel(易上手)相关推荐

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

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

  2. python 爬取豆瓣top100电影页面

    python 爬取豆瓣top100电影页面 运行结果截图: 代码: (原网站:https://movie.douban.com/top250) 1.将页面保存 避免多次访问 (登陆状态需页面cooki ...

  3. python爬取豆瓣排行榜电影(静态爬取)(二次爬取)

    目录 python爬取豆瓣排行榜电影(静态爬取) 获取网站url 获取网站headers get请求访问url BeautifulSoup解析网站 爬取html数据 完整代码 python爬取豆瓣排行 ...

  4. python爬取豆瓣读书top250并保存xls(含源码)

    python爬取豆瓣读书top250并保存xls(含源码) 又是霍霍豆瓣的一天O(∩_∩)O哈哈~. 目标网站:http://book.douban.com/top250/ 全军出击!!! 首先,按下 ...

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

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

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

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

  7. 爬取豆瓣TOP250电影并保存为excel文件与db文件,有网页展示哦!

    任务介绍 想网页效果的小伙伴,可以直接拉到最后!!!哈哈哈!!! 基本流程 在豆瓣上通过F12调试,可以看出我们需要爬取的内容在<div class="item">这里 ...

  8. python爬取豆瓣排行榜电影数据(含GUI界面版)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  9. Python爬取豆瓣动作电影好评前100名

    获取豆瓣动作电影好评前100名 代码 #!/usr/bin/env python # -*- coding: utf-8 -*- # https://movie.douban.com/j/chart/ ...

  10. python爬取豆瓣TOP250电影

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

最新文章

  1. Vue的自定义滚动,我用el-scrollbar
  2. 爱丁堡大学人工智能和计算机科学研究生申请入口
  3. 05字符串的常用基本操作
  4. 中小企业利用VRRP实现链路负载均衡
  5. 全球地区资料json 含中英文 经纬度_2020年Brain Bee北京、天津、河北赛区地区赛参赛说明...
  6. 使用python往数据库中添加数据
  7. 上传图片至fastdfs显示连接超时
  8. 【优化预测】基于matlab蝙蝠算法优化LSSVM预测【含Matlab源码 109期】
  9. 基于Java的Android计算器设计与实现
  10. Android 源码编译mk里导入androidx下的包
  11. 一树梨花压海棠的典故
  12. 信号处理学习笔记(一)截止频率Cutoff Frequency
  13. 用matplotlib可视化加州房价价格(散点图各个参数的含义)
  14. 什么是强化学习?(贝尔曼方程)
  15. BI技巧丨近两年及当年月份数据汇总
  16. 如何用计算机进行绘画,如何在电脑上画画
  17. el-checkbox 自定义 复选框【多选框】
  18. 雷达监控与视频监控性能对比分析
  19. 华为手机安卓8.0以上的谷歌商店找不到的问题
  20. JAVA的异常处理机制有什么好处,你造吗?

热门文章

  1. 优麒麟双系统启动引导修改默认项更改教程
  2. jquery悬浮在右侧的在线客服代码
  3. 如何批量去除图片水印?批量去水印方法
  4. 解决photoshop cc在4K分辨率下字体过小。
  5. 改变图片强调可修改r,如s.val[i]*scale*r
  6. JobTracker作业启动过程分析
  7. 【IC4】运算放大器的开环增益,开环输出电压
  8. Android开发Tips(5)
  9. css3揭秘读书笔记--边框内圆角
  10. 40年间,“国货”如何崛起