目录

  • 开发工具
  • 目标
  • 网页分析
  • 正则匹配分析
  • 代码实例
  • 总结

开发工具

  • python版本: python-3.8.1-amd64
  • python开发工具: JetBrains PyCharm 2018.3.6 x64
  • 安装requests库(指定阿里镜像安装会很快)
    pip install requests -i http://mirrors.aliyun.com/pypi/simple/

-豆瓣电影TOP250网页地址https://movie.douban.com/top250

目标

获取豆瓣电影TOP250中电影名称,年份,评分和评论数

网页分析

在浏览器中右键点击查看网页源代码
该网页内容为服务器端渲染展示内容,需要获取网页源代码抓取数据

<ol class="grid_view"><li><div class="item"><div class="pic"><em class="">1</em><a href="https://movie.douban.com/subject/1292052/"><img width="100" alt="肖申克的救赎" src="https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp" class=""></a></div><div class="info"><div class="hd"><a href="https://movie.douban.com/subject/1292052/" class=""><span class="title">肖申克的救赎</span><span class="title">&nbsp;/&nbsp;The Shawshank Redemption</span><span class="other">&nbsp;/&nbsp;月黑高飞(港)  /  刺激1995(台)</span></a><span class="playable">[可播放]</span></div><div class="bd"><p class="">导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins /...<br>1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情</p><div class="star"><span class="rating5-t"></span><span class="rating_num" property="v:average">9.7</span><span property="v:best" content="10.0"></span><span>2499740人评价</span></div><p class="quote"><span class="inq">希望让人自由。</span></p></div></div></div></li><li><div class="item"><div class="pic"><em class="">2</em><a href="https://movie.douban.com/subject/1291546/"><img width="100" alt="霸王别姬" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2561716440.webp" class=""></a></div><div class="info"><div class="hd"><a href="https://movie.douban.com/subject/1291546/" class=""><span class="title">霸王别姬</span><span class="other">&nbsp;/&nbsp;再见,我的妾  /  Farewell My Concubine</span></a><span class="playable">[可播放]</span></div><div class="bd"><p class="">导演: 陈凯歌 Kaige Chen&nbsp;&nbsp;&nbsp;主演: 张国荣 Leslie Cheung / 张丰毅 Fengyi Zha...<br>1993&nbsp;/&nbsp;中国大陆 中国香港&nbsp;/&nbsp;剧情 爱情 同性</p><div class="star"><span class="rating5-t"></span><span class="rating_num" property="v:average">9.6</span><span property="v:best" content="10.0"></span><span>1858334人评价</span></div><p class="quote"><span class="inq">风华绝代。</span></p></div></div></div></li>

正则匹配分析

这里用到最多的是懒惰匹配.? ; 还有给要获取的内容命名(?<名称>.?)

<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'
r'</span>.*?<p class="">.*?<br>(?P<year>.*?)&nbsp.*?'
r'<span class="rating_num" property="v:average">(?P<rating_num>.*?)</span>.*?'r'<span>(?P<evaluationsNum>.*?)人评价</span>

代码实例

import requests
import re
import json
from requests.exceptions import RequestException
import csv
import timedef get_one_page(url):try:headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36",'Connection': 'close'}response = requests.get(url, headers=headers)if response.status_code == 200:response.close()return response.textreturn Noneexcept RequestException:return Nonedef parse_one_page(html):pattern = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'r'</span>.*?<p class="">.*?<br>(?P<year>.*?)&nbsp.*?'r'<span class="rating_num" property="v:average">(?P<rating_num>.*?)</span>.*?'r'<span>(?P<evaluationsNum>.*?)人评价</span>', re.S)result = pattern.finditer(html)for it in result:yield {'name': it.group("name"),  # 电影名'year': it.group("year").strip(),  # 年份'rating_num': it.group("rating_num"), #排名'evaluationsNum': it.group("evaluationsNum")  # 评分}def write_to_txt(content):with open('result.txt', 'a', encoding='utf-8') as f:# print(type(json.dumps(content)))f.write(json.dumps(content, ensure_ascii=False) + "\n")def write_to_csv(content):f = open('douban.csv', mode='a',encoding='utf-8')csvwriter = csv.writer(f)csvwriter.writerow(content.values())def main(offset):url = 'http://movie.douban.com/top250?start=' + str(offset)html = get_one_page(url)for item in parse_one_page(html):print(item)# write_to_txt(item)write_to_csv(item)if __name__ == '__main__':for i in range(10):main(offset=i * 25)time.sleep(1)  # 如果速度过快,则会无响应,所以这里又增加了一个延时等待

总结

1.time.sleep(1)增加延时等待,避免访问速度过快
2.open打开文件时,mode模式用a,可以进行文件内容的追加

python爬虫实例-运用requests抓取豆瓣电影TOP250(详解)相关推荐

  1. Python爬虫实战(一):爬取豆瓣电影top250排名

    先上代码 #coding=utf-8 import re import urllib.requestdef getHtml(url):page = urllib.request.urlopen(url ...

  2. python爬取豆瓣电影top250并保存为xlsx_python抓取豆瓣电影Top250数据并写入Excel

    douban python抓取豆瓣电影Top250数据并写入Excel 1.将目标网站上的页面抓取下来 2.将抓取下来的数据根据一定的规则进行提取 create table `tb_movie`( i ...

  3. Python爬虫入门 | 7 分类爬取豆瓣电影,解决动态加载问题

      比如我们今天的案例,豆瓣电影分类页面.根本没有什么翻页,需要点击"加载更多"新的电影信息,前面的黑科技瞬间被秒--   又比如知乎关注的人列表页面:   我复制了其中两个人昵称 ...

  4. python爬虫(一)爬取豆瓣电影排名前50名电影的信息

    python爬虫(一)爬取豆瓣电影排名前50名电影的信息 在Python爬虫中,我们可以使用beautifulsoup对网页进行解析. 我们可以使用它来爬取豆瓣电影排名前50名的电影的详细信息,例如排 ...

  5. python2.7抓取豆瓣电影top250

    利用python2.7抓取豆瓣电影top250 1.任务说明 抓取top100电影名称 依次打印输出 2.网页解析 要进行网络爬虫,利用工具(如浏览器)查看网页HTML文件的相关内容是很有必要,我使用 ...

  6. Python3 抓取豆瓣电影Top250

    利用 requests 抓取豆瓣电影 Top 250: import re import requestsdef main(url):global numheaders = {"User-A ...

  7. 【go语言爬虫】go语言爬取豆瓣电影top250

    一.需求分析 用go语言抓取 豆瓣电影top250 抓取url: https://movie.douban.com/top250 抓取字段:电影名称.评分.评价人数 二.运行: 正在抓取第0页-- 肖 ...

  8. python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250

    今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息. 步骤如下: 一.爬取单页信息 首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令 ...

  9. 跟随B站视频学Python爬虫过程(6):豆瓣电影TOP250并存Excel(使用urllib, bs, re, xlwt库)

    出于督促自己学习以及未来回顾和分享的目的,记录一下自己的学习过程. B站视频号:BV12E411A7ZQ ep15-25. 完成爬取信息,处理数据,保存到Excel.具体流程为: 1. 找到目标网页的 ...

最新文章

  1. bugzilla部署
  2. laravel修改storage目录和bootstrap目录
  3. VC++ 使用attributes定义接口
  4. 技术选型:Sentinel vs Hystrix
  5. OpenStack精华问答 | OpenStack 网络中 OpenFlow 规则的作用是什么?
  6. 协程(Python)
  7. python反向查找字符_序列化使用(正向和反向查找)
  8. 【渝粤题库】陕西师范大学200071 古代汉语 作业(高起本、高起专)
  9. ORACLE 指令基础学习
  10. java会议记录管理系统实验报告代码_会议记录管理系统.docx
  11. 计算机网络基础 — Bypass 网卡
  12. 7500 cpuz跑分 i5_锐龙R5 1400对比i5 7500哪个好 R5-1400与i5-7500区别对比详细评测
  13. java 换行规范_Java代码规范
  14. Mysql数据库锁与隔离级别
  15. Cassandra启动过程详解
  16. angular 访问图片路径错误
  17. 深拖式多道高分辨率地震探测系统
  18. php转java学什么书,推荐给java软件工程师以及从java转向php程序猿的一本好书
  19. 蜗蜗的毛衣花样c++
  20. 基于pyqt5 构建弹窗进度条,在大型计算中实时显示进度

热门文章

  1. 五、HTML5 千纸鹤动画特效
  2. 致敬生命 看南京鼓楼医院如何打造IT界的“急救中心”
  3. poj 3164 Command Network
  4. [remote rejected] master->master (unpacker error)
  5. 双缝干涉实验的新设计
  6. jzoj5399 【NOIP2017提高A组模拟10.7】Confess
  7. Ajax怎么获取data为集合的值,vue,ajax获取本地的json文件,赋值后,computed和mounted里访问不到重新赋值后的listDatas...
  8. 毕业一年了,总结一下一年的收获!顺便回忆一下!
  9. 被国产芯片支配的恐惧——MAX3232 ESE+
  10. 哈工大csapp lab3