栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爬取豆瓣电影TOP100

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬取豆瓣电影TOP100

爬虫

首先我们在网站中打开我们要爬的网站
“http://maoyan.com/board/4”
这就是豆瓣高分电影前100的榜单.

然后我们点击f12 再刷新一次 就可以看到网页的基本信息了。
这时候我们来看一下第一部‘我不是药神中的代码信息。’

一个dd节点为一个电影的全部信息。
我们用正则表达式的方法去分析上面的代码 首先是class为board-index的排名信息。
我们用正则表达式应该是这么去写

 dd .*?board-index.*? (.*?) /i 

那我们接着分析第二部分的图片 我们看图片的节点一共有两点 两个img节点。
我们发现第二个img节点属性为data-src为图片链接 所以我们就分析这部分。
我们用正则表达式应该是这么去写

.*?data.src (.*?) 

以此类推我们接着分析剩下所有的信息。
第三部分为电影名 电影名在p节点的class name下面。
我们用正则表达式应该这么写

.*?name .*?a.*? (.*?) /a 

那么接下来我们就写一个完整的信息 分别记录了排名 照片 名字 演员 时间 评分。

 dd .*?board-index.*? (.*?) /i .*?data-src (.*?) .*?name.*?a.*? (.*?) /a .*?star .*? (.*?) /p .*?releasetime.*? (.*?) /p .*?integer.*? (.*?) /i .*?fraction.*? (.*?) /i .*? /dd 

那我们就可以正式一步一步去做一份爬取任务了
1.导入库

import json
import requests
from requests.exceptions import RequestException
import re
import time #time库是用来延时访问 某些网站设置了反爬 不能快速连续访问该网站

2.抓取首页

def 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.text
 return None
 except RequestException:
 return None

3.正则提取

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.写入文件

def write_to_file(content):
 with open( result.txt , a , encoding utf-8 ) as f:
 f.write(json.dumps(content, ensure_ascii False) n )

5.分页爬取

我们可以看到 一页有10个电影。那我们爬取TOP100 则需要看10页的电影内容。

当我们切到下一页的时候 我们发现网站名称后多了offset 10.第三页的时候则是offest 20.
那我们就明白了 我们可以根据offest来对TOP100进行分页爬虫。

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) #猫眼多了反爬虫 所以我们要延时等待。

完整代码

import json
import requests
from requests.exceptions import RequestException
import re
import time
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266670.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号