Python爬虫实例1

爬取猫眼电影TOP100(http://maoyan.com/board/4)的相关内容

step1 准备工作

目标:
爬取猫眼电影TOP100的电影名称、时间、评分、图片

分析:
第一页URL:https://maoyan.com/board/4,展示了排行1-10的电影;
第二页URL:https://maoyan.com/board/4?offset=10,展示了排行10-20的电影;

获取TOP100,需要分开请求10次,参数offset分别为:0,10…90

step2 获取数据

1.爬取第一页的源代码

import requestsdef get_one_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}response = requests.get(url=url, headers=headers)html = response.textreturn htmldef main():url = "https://maoyan.com/board/4"html = get_one_page(url)print(html)

2.正则提取信息


每个电影对应一个dd节点

 <dd><i class="board-index board-index-1">1</i><a href="/films/1200486" title="我不是药神" class="image-link" data-act="boarditem-click" data-val="{movieId:1200486}"><img src="//s3plus.meituan.net/v1/mss_e2821d7f0cfe4ac1bf9202ecf9590e67/cdn-prod/file:5788b470/image/loading_2.e3d934bf.png" alt="" class="poster-default" /><img data-src="https://p0.meituan.net/movie/414176cfa3fea8bed9b579e9f42766b9686649.jpg@160w_220h_1e_1c" alt="我不是药神" class="board-img" />`在这里插入代码片`</a><div class="board-item-main"><div class="board-item-content"><div class="movie-item-info"><p class="name"><a href="/films/1200486" title="我不是药神" data-act="boarditem-click" data-val="{movieId:1200486}">我不是药神</a></p><p class="star">主演:徐峥,周一围,王传君</p>
<p class="releasetime">上映时间:2018-07-05</p>    </div><div class="movie-item-number score-num">
<p class="score"><i class="integer">9.</i><i class="fraction">6</i></p>        </div></div></div></dd>

爬取信息的正则表达式:

<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>

括号内匹配了7个信息:排名、图片、名称、主演、上映时间、评分整数部分、评分小数部分

def parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)items = re.findall(pattern, html)return items

3.处理得到的数据

数据比较杂乱,我们要对数据进行处理。
我们遍历提取结果生成字典,形成结构化数据

需要使用两个函数:
(1)yield:通俗理解,yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始
(2)strip:去掉字符串两边的空格

更新代码

def parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)items = re.findall(pattern, html)for item in items:yield{'index': item[0],'image': item[1],'title': item[2],'actor': item[3].strip()[3:],'time': item[4].strip()[5:],'score': item[5]+item[6]}

4.分页爬取
给链接传入参数offset即可

def main(offset):url = "https://maoyan.com/board/4?offest="+str(offset)html = get_one_page(url)for item in parse_one_page(html):print(item)if __name__ == '__main__':for i in range(10):main(offset=i*10)

step3 写入文件

def write_to_file(item):with open('result.txt', 'a', encoding='utf-8') as f:print(type(json.dumps(item)))f.write(json.dumps(item, ensure_ascii=False)+'\n')

step4 运行结果

1.完整代码:

import json
import requests
from requests.exceptions import RequestException
import re
import timedef get_one_page(url):try:headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textreturn Noneexcept RequestException:return Nonedef parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)items = re.findall(pattern, html)for item in items:yield {'index': item[0],'image': item[1],'title': item[2],'actor': item[3].strip()[3:],'time': item[4].strip()[5:],'score': item[5] + item[6]}def write_to_file(content):with open('result.txt', 'a', encoding='utf-8') as f:f.write(json.dumps(content, ensure_ascii=False) + '\n')def main(offset):url = 'http://maoyan.com/board/4?offset=' + str(offset)html = get_one_page(url)for item in parse_one_page(html):print(item)write_to_file(item)if __name__ == '__main__':for i in range(10):main(offset=i * 10)time.sleep(1)

2.txt文件

Python爬虫实例1相关推荐

  1. python爬虫实例-记录一次简单的Python爬虫实例

    本次的这篇文章主要是和大家分享了一篇关于记录一次简单的Python爬虫实例 ,有需要的小伙伴可以看一下. 主要流程分为: 爬取.整理.存储 1.其中用到几个包,包括 requests 用于向网站发送请 ...

  2. Python爬虫实例--新浪热搜榜[xpath语法]

    Python爬虫实例--新浪热搜榜[xpath语法] 1.基础环境配置: requests-->版本:2.12.4 lxml-->版本:3.7.2 2.网页分析 很容易从html源码中看到 ...

  3. Python爬虫实例--新浪热搜榜[正则表达式]

    Python爬虫实例--新浪热搜榜[正则表达式] 1.基础环境配置: requests-->版本:2.12.4 re-->:Python自带,无需安装 2.网页分析 很容易从html源码中 ...

  4. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  5. Python爬虫实例(3)--BeautifulSoup的CSS选择器

    Python爬虫实例 紧接着上一讲的内容. 我们初步了解了bs4这个解析库. 但是bs4难道只有find,find_all了吗? 如果层次比较深,相似的元素比较多,和可能会写的比较长. 最主要的是很难 ...

  6. python爬虫实例教程之豆瓣电影排行榜--python爬虫requests库

    我们通过requests库进行了简单的网页采集和百度翻译的操作,这一节课我们继续进行案例的讲解–python爬虫实例教程之豆瓣电影排行榜,这次的案例与上节课案例相似,同样会涉及到JSON模块,异步加载 ...

  7. Python爬虫实例 wallhaven网站高清壁纸爬取。

    文章目录 Python爬虫实例 wallhaven网站高清壁纸爬取 一.数据请求 1.分析网页源码 2.全网页获取 二.数据处理 1.提取原图所在网页链接 2.获取高清图片地址及title 三.下载图 ...

  8. python爬虫实例之——多线程爬取小说

    之前写过一篇爬取小说的博客,但是单线程爬取速度太慢了,之前爬取一部小说花了700多秒,1秒两章的速度有点让人难以接受. 所以弄了个多线程的爬虫. 这次的思路和之前的不一样,之前是一章一章的爬,每爬一章 ...

  9. 饱暖思淫欲之美女图片的Python爬虫实例(二)

    美女图片的Python爬虫实例:面向服务器版 ==该爬虫面向成年人且有一定的自控能力(涉及部分性感图片,仅用于爬虫实例研究)== 前言 初始教程 存在问题 解决思路 目标 实现步骤 硬件配置 服务器信 ...

  10. Python爬虫实例(1)--requests的应用

    Python爬虫实例(1) 我们在接下来的爬虫实例(1)里面将逐步的循序渐进的介绍爬虫的各个步骤. 已及时用到的工具,以及具体情况下的用法. 我们的任务是这样的: 爬取<修真聊天群>小说的 ...

最新文章

  1. 安卓设置菊花动画_Android Progressbar自定义菊花效果
  2. Sublime Text3注册激活和部分配置
  3. python成长之路9——文件操作open
  4. java 发送 接受 xml请求
  5. [Java基础]Junit测试
  6. 头顶距离顶部百分比_近距离接触COLMO子母太空舱洗衣机:“真分区洗”应该什么样...
  7. c语言 while(cin),C++中while(cina)是什么意思
  8. 区块链开源代码什么意思_区块链可以从开源中学到什么
  9. 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如 果该年没有举办世界杯,则输出:没有举办世界杯
  10. 定时关机软件里的锁定计算机,怎么让电脑定时关机设置大全
  11. android windows安卓版,安卓模拟器 WindowsAndroid
  12. C#课程设计(购物平台)
  13. Unity 相机 2D视角 与3D 视角 自由动态 切换
  14. [经验栈]C#监测IPv4v6网速及流量
  15. (十)进度条媒体对象和 Well 组件
  16. Android Battery信息
  17. jenkins提示没有这个文件: ‘pom.xml‘
  18. 使用基于Apache Spark的随机森林方法预测贷款风险
  19. 高师培训计算机心得体会,培训学习心得体会范文
  20. 请问,你心里有B树吗??(B树添加、删除操作详细图解)

热门文章

  1. 铁木辛柯matlab,岩石断裂力学(李世愚2006)
  2. python爬虫从网页下载文件_用 Python爬虫下载网页文件教程-ie缓存文件提取器
  3. java软件的安装过程
  4. jenkins设置构建触发器
  5. 读WebTrends的Javascript源码笔记
  6. 用友U8总账对账不平问题总结
  7. 汇编语言程序设计---分支程序设计
  8. bzoj 1171 大sz的游戏 2892 强袭作战 (线段树+单调队列+永久性flag)
  9. lcd1602c语言程序分析,全方位解析LCD1602特性及单片机显示应用
  10. linux下音频剪辑软件,音频剪辑软件哪个好用?5款免费开源的音频剪辑软件推荐...