学完正则的一个小例子就是爬取猫眼排行榜TOP100的所有电影信息

看一下网页结构:

可以看出要爬取的信息在<dd>标签和</dd>标签中间

正则表达式如下:

pattern=re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>'
+'(.*?)</a>.*?star">(.*?)</p>'
+'.*?releasetime">(.*?)</p>.*?integer">(.*?)'
+'</i>.*?fraction">(.*?)</i></p>.*?</dd>',
re.S)

源码如下:

import requests
import re
import time
import json def get_one_page(url):
headers={
'User-Agent': "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5"
}
response=requests.get(url,headers=headers)
if response.status_code==200:
return response.text
return None def parse_one_page(html): pattern=re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>'
+'(.*?)</a>.*?star">(.*?)</p>'
+'.*?releasetime">(.*?)</p>.*?integer">(.*?)'
+'</i>.*?fraction">(.*?)</i></p>.*?</dd>',
re.S) '''
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 {
'排名':item[0],
'图片':item[1],
'名字':item[2].strip(),
'演员':item[3].strip()[3:]if len(item[3])>3 else '',
'时间':item[4].strip()[5:]if len(item[4])>5 else '',
'评分':item[5].strip()+item[6].strip()
} def write_to_file(content):
with open('movie.txt','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n') def main(offset):
url='https://maoyan.com/board/4?offset='+str(offset)
html=get_one_page(url)
#print(html)
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)

在弄这个的时候,自己先写了一遍正则,,不过只能爬取每一页的第一条数据,然后就没有下文了,,百思不得解

然后仔细的和书上的正则匹配,才发现有的地方写错了,通过这个例子,我们可以知道,正则表达式真的麻烦。。。。

也好难写。

运行结果:

最后还将数据保存在本地,,

GitHub地址:https://github.com/tyutltf/maoyan

爬取猫眼TOP100的更多相关文章

  1. Python 爬取 猫眼 top100 电影例子

    一个Python 爬取猫眼top100的小栗子 import json import requests import re from multiprocessing import Pool #//进程 ...

  2. python爬虫:爬取猫眼TOP100榜的100部高分经典电影

    1.问题描述: 爬取猫眼TOP100榜的100部高分经典电影,并将数据存储到CSV文件中 2.思路分析: (1)目标网址:http://maoyan.com/board/4 (2)代码结构: (3) ...

  3. 使用Beautiful Soup爬取猫眼TOP100的电影信息

    使用Beautiful Soup爬取猫眼TOP100的电影信息,将排名.图片.电影名称.演员.时间.评分等信息,提取的结果以文件形式保存下来. import time import json impo ...

  4. 7.5爬取猫眼Top100电影名单

    2018-7-5 20:22:57 还有有一丢丢成就感!以后可以爬取简单网站了!比如妹子图片,只是现在不知道咋下载! 正则还是刚看,要多去用正则!正则很强大的东西! #!/usr/bin/env py ...

  5. 整理requests和正则表达式爬取猫眼Top100中遇到的问题及解决方案

    最近看崔庆才老师的爬虫课程,第一个实战课程是requests和正则表达式爬取猫眼电影Top100榜单.虽然理解崔老师每一步代码的实现过程,但自己敲代码的时候还是遇到了不少问题: 问题1:获取respo ...

  6. 【爬虫】-爬取猫眼TOP100

    原文崔庆才<python3网络爬虫实战> 本文为自学记录,如有侵权,请联系删除 目标: 熟悉正则表达式,以及爬虫流程 获取猫眼TOP100榜单 1.网站分析 目标站点为http://www ...

  7. Python爬取猫眼top100排行榜数据【含多线程】

    # -*- coding: utf-8 -*- import requests from multiprocessing import Pool from requests.exceptions im ...

  8. 使用Requests+正则表达式爬取猫眼TOP100电影并保存到文件或MongoDB,并下载图片

    需要着重学习的地方:(1)爬取分页数据时,url链接的构建(2)保存json格式数据到文件,中文显示问题(3)线程池的使用(4)正则表达式的写法(5)根据图片url链接下载图片并保存(6)MongoD ...

  9. 爬取猫眼电影TOP100

    本文所讲的爬虫项目实战属于基础.入门级别,使用的是Python3.5实现的. 本项目基本目标:在猫眼电影中把top100的电影名,排名,海报,主演,上映时间,评分等爬取下来 爬虫原理和步骤 爬虫,就是 ...

随机推荐

  1. How to prepare system design questions in a tech interview?

    http://blog.baozitraining.org/2014/09/how-to-prepare-system-design-questions.html 如何准备面试中的系统设计问题一直都是 ...

  2. Linux 安装问题

    问题1: root>sudo apt-get install yum 提示: dpkg was interrupted, you must manually run 'sudo dpkg --c ...

  3. C# 操作Excel 格式

    数字(Range.NumberFormatlocal 属性)常规:Range.NumberFormatlocal = "G/通用格式"数值:Range.NumberFormatlo ...

  4. 字符串模式匹配之KMP算法的next数组详解与C++实现

    相信来看next数组如何求解的童鞋已经对KMP算法是怎么回事有了一定的了解,这里就不再赘述,附上一个链接吧:https://www.cnblogs.com/c-cloud/p/3224788.html ...

  5. ABAP类的文档生成工具

    本文介绍的工具原理和JavaDoc类似,位于software component BBPCRM 1. 在ABAP类里新建一个名为CLASS_DOCU的私有方法. 然后把所有的注释写在这个方法源代码的前 ...

  6. 针对ArcGIS Server 跨域问题的解释

    在博客Hello World文章中提起过,以前在sinaapp中建立过wordpress博客,也写过一篇关于ArcGIS JavaScript API的文章,但是由于sinaapp开始收费以后,我的个 ...

  7. Java---页面之间传值跳转

    从首页A进入页面B,然后从B页面登录,成功后跳转到A页面,并打印一句话“登录成功”,传值需要用的后台的. 在B页面写: <%     session.setAttribute("key ...

  8. 小知识积累-C++使用tinyxml解析Xml内存泄漏问题

    项目中需要用到C++解析XML,网上搜到tinyxml这么个开源库,就用了下试试,创建对象后内部自带Clear方法,但在循环测试的时候(刚用C++做项目不久,不会什么特别的内存泄漏测试工具,于是就写个 ...

  9. PHP时间戳和日期相互转换(转载)

    在php中我们要把时间戳转换日期可以直接使用date函数来实现,如果要把日期转换成时间戳可以使用strtotime()函数实现,下面我来给大家举例说明. 1.php中时间转换函数 strtotime ...

  10. Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】

    传送门:http://codeforces.com/contest/1081/problem/C C. Colorful Bricks time limit per test 2 seconds me ...