今天我们来爬取一下豆瓣网上排名前250的电影。

需求:爬取豆瓣网上排名前250的电影,然后将结果保存至一个记事本里。

开发环境:

python3.9

pycharm2021专业版

我们先观察网页,看看它的url规律:

第一页:https://movie.douban.com/top250?start=0&filter=

第二页:https://movie.douban.com/top250?start=25&filter=

第三页:https://movie.douban.com/top250?start=50&filter=

不难看出,页数每次加1,url里面start的值就加20,一共有10页,start的值最大为225。

这是因为1页里面有25部电影。一共有10页,也就是250部电影。

接着我们再看看要获取电影的名称的html内容规律:

按住键盘的F12键,进入到网页的审查元素板块

点击右上角的图标之后回到网页进行点击网页内的一个元素,进行元素审查

这里我们点击电影名称,就能获得它的html内容了

接着我们看下它的规律,方便后续的正则匹配:

<span class="title">肖申克的救赎</span>
<span class="title">霸王别姬</span>

之后导入我们的urllib模块和re模块

  • urllib.request 模块:提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还带有处理 authenticaton (授权验证), redirections (重定向), cookies (浏览器Cookies)以及其它内容
  • urllib.error模块:用来捕获异常
  • re模块:正则表达式,来匹配要获取的资源
import urllib.request
import urllib.error
import re

我的代码总共分为四个部分:

主函数

if __name__ == "__main__":pass

get_pages()函数:

用来发送网络请求,获取所需网页内容

def get_pages(url):pass

parse_content()函数:

对返回到的网页内容进行解析,再通过正则表达式匹配规则来获得所需要的网络资源:电影名称

def parse_content(content):pass

print_list()函数:

将获得到的电影列表写进一个记事本里

def print_list(url):pass

主函数

根据上文给出的url规律来设置while循环,让页数从0开始每次循环都加25,最大值为225。

之后调用print_list()函数

 if __name__ == "__main__":pages = 0while pages <= 225:url = 'https://movie.douban.com/top250?start=%s' % pagesprint("正在爬取数据..........")pages += 25print_list(url)print("爬取完毕!")

get_pages()函数

防止网站有反爬虫机制,我们需要模拟浏览器来进行访问。

在网页的审查元素中找到user-Agent,写进去

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.41'}

发起请求并返回网页html内容

.....try:response = urllib.request.Request(url, headers=headers)content = urllib.request.urlopen(response).read()except urllib.error.URLError as e:print("爬取%s失败......................")%urlprint('错误原因:'+e.reason)else:return content

parse_content()函数

正则匹配

pattern = re.compile(r'<span class="title">(.*?)</span>')
movies_list = re.findall(pattern, content)

print_list()函数

将电影名单写进一个记事本里,同时还要注意内容换行

 with open('豆瓣电影前250.txt', 'w', encoding='utf-8') as file:for i in movies_list:file.write(i+'\r\n')

源码

import urllib.request
import urllib.error
import re
​
​
def get_pages(url):"""返回所要爬取网页的html内容"""headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.41'}try:response = urllib.request.Request(url, headers=headers)content = urllib.request.urlopen(response).read()except urllib.error.URLError as e:print("爬取%s失败......................")%urlprint('错误原因:'+e.reason)else:return content
​
​
def parse_content(content):"""对返回到的内容进行解析,获取所要资源:电影名称,并且放进列表里面"""content = content.decode('utf-8')pattern = re.compile(r'<span class="title">(.*?)</span>')movies_list = re.findall(pattern, content)return movies_list
​
​
def print_list(url):"""打印电影名单,并写入文件里面"""content = get_pages(url)movies_list = parse_content(content)with open('豆瓣电影前250.txt', 'w', encoding='utf-8') as file:for i in movies_list:file.write(i+'\r\n')
​
​
if __name__ == "__main__":"""爬取豆瓣网排名前250的电影"""pages = 0while pages <= 225:url = 'https://movie.douban.com/top250?start=%s' % pagesprint("正在爬取数据..........")pages += 25print_list(url)print("爬取完毕!")

我们来看一下结果

我们可以看到,结果并不是很如我们所愿,这是为什么呢?

我们重新查看网页元素,发现了这么一个现象

我们的正则匹配规则是这样的

pattern = re.compile(r'<span class="title">(.*?)</span>')

可以看到,这个匹配规则会将上面这两个网页元素一起匹配出来,就会导致我的爬取出来的电影列表里有这样一串不知名字符串。

那么有没有更好的办法呢?

肯定是有的,在下一集我们将使用一个俗称“靓汤”的模块,有了这个模块,我们的问题可以彻底解决,并且让我们爬虫更加得心应手。

Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)相关推荐

  1. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)

    在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...

  2. Python爬虫实战:爬取贝壳网二手房40000条数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...

  3. Python爬虫实战之爬取web网易云音乐——解析

    找到存储歌曲地址的url界面 首先我们要进入网易云的web页面在页面中我们随意选择一首歌曲,打开开发者工具查看响应的界面. 在这些页面中我们需要查找存储有音乐文件的url,这是我们可以打开全局搜索直接 ...

  4. python爬取豆瓣影评_【python爬虫实战】爬取豆瓣影评数据

    概述: 爬取豆瓣影评数据步骤: 1.获取网页请求 2.解析获取的网页 3.提速数据 4.保存文件 源代码: # 1.导入需要的库 import urllib.request from bs4 impo ...

  5. Python爬虫实战 | (3) 爬取豆瓣电影Top250

    在本篇博客中,我们将使用requests+正则表达式来爬取豆瓣电影TOP250电影榜单,获取每部电影的序号.片名.导演.编剧.主演.类型.制作国家/地区.语言.上映日期.片长.又名.豆瓣评分和剧情简介 ...

  6. Python爬虫实战之爬取豆瓣详情以及影评

    爬取豆瓣详情分为三步: 1.爬取豆瓣电影的所有标签,遍历标签,通过分析网址结构获得每一类标签下的电影url 2.通过url 爬取电影详情 3.导入数据库 爬虫代码如下: from urllib imp ...

  7. Python爬虫实战(爬取豆瓣电影)

    首先介绍一下python的几个库,python之所以在实现爬虫方面有独特的优势,在于其类库非常的丰富,基本涵盖了所有的需求,只要找到对应的库进行import,这就类似于Java中导入类库或者jar包那 ...

  8. Python爬虫实战:爬取贝壳网二手房成交数据,将数据存入Excel。

    import requests import xlrd as xlrd from xlutils.copy import copy from lxml import etree def getData ...

  9. Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

      先来看看页面长啥样的:https://book.douban.com/top250   我们将要爬取哪些信息:书名.链接.评分.一句话评价--   1. 爬取单个信息 我们先来尝试爬取书名,利用之 ...

最新文章

  1. 九度 1371 最小的K个数
  2. 解决Centos6.5虚拟机上网问题
  3. MVCC(Multi-version Cocurrent Control)
  4. [上海站] 微软Azure AspNetCore微服务实战
  5. python3 dict 排序_Python 3.9 新增功能展望
  6. 算法岗百里挑一热爆了,全球AI大厂薪酬大起底
  7. android 功能清单文件夹,全新Android L大小全部功能清单整理
  8. 《天天数学》连载27:一月二十七日
  9. iPhone X 的新解锁技术:用 Python 编写 Face ID!
  10. 大数据就业前景:大数据分析师是青春饭吗?
  11. Clean Code(代码整洁之道)-有意义的命名
  12. JavaScript如何计算两个日期之间的时间差?
  13. KMP字符串匹配算法
  14. 微信小程序之在线任务发布与接单平台
  15. 【论文翻译】:(arxiv 2022)PS-NeRV: Patch-wise Stylized Neural Representations for Videos
  16. 论文解读-DeepMove: Predicting Human Mobility with Attentional Recurrent Networks
  17. 程序设计入门——C语言 翁恺 第3周编程练习
  18. 什么是SaaS平台?SaaS软件平台有什么优势
  19. C#腾讯地图Web端定位地址搜索及手机导航
  20. 升降式止回阀行业调研报告 - 市场现状分析与发展前景预测

热门文章

  1. JS获取页面数据并打印
  2. 【JDK版本常见报错及其解决,京东数科Java面试
  3. ASP.NET查找路由表RouteTable中路由名等信息的方法
  4. 计算机硬件设备维护培训方案,计算机硬件维护技术及故障解决
  5. 【浏览器】Ajax 是什么? Ajax的基本流程?
  6. 架构师成长之路 5 --如何获取知识(学习境界)(方法)
  7. 杰理BLE AC631N/636N---接入阿里天猫精灵测试
  8. SSM教育培训管理系统毕业设计源码141053
  9. windows端口转发
  10. 2022年的CSR和SSR