一:分析网站

目标站和目标数据
目标地址:http://maoyan.com/board/4?offset=20
目标数据:目标地址页面的电影列表,包括电影名,电影图片,主演,上映日期以及评分。

二:上代码

(1):导入相应的包

import requests
from requests.exceptions import RequestException # 处理请求异常
import re
import pymysql
import json
from multiprocessing import Pool

(2):分析网页

通过检查发现需要的内容位于网页中的<dd>标签内。通过翻页发现url中的参数的变化。

(3):获取html网页

# 获取一页的数据
def get_one_page(url):# requests会产生异常headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',}try:response = requests.get(url, headers=headers)if response.status_code == 200:  # 状态码是200表示成功return response.textelse:return Noneexcept RequestException:return None

(4):通过正则提取需要的信息 --》正则表达式详情

# 解析网页内容
def parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?class="name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)  # re.S可以匹配任意字符包括换行items = re.findall(pattern, html)  # 将括号中的内容提取出来for item in items:yield {  # 构造一个生成器'index': item[0].strip(),'title': item[2].strip(),'actor': item[3].strip()[3:],'score': ''.join([item[5].strip(), item[6].strip()]),'pub_time': item[4].strip()[5:],'img_url': item[1].strip(),}

(5):将获取的内容存入mysql数据库

# 连接数据库,首先要在本地创建好数据库
def commit_to_sql(dic):conn = pymysql.connect(host='localhost', port=3306, user='mydb', passwd='123456', db='maoyantop100',charset='utf8')cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 设置游标的数据类型为字典sql = '''insert into movies_top_100(mid,title,actor,score,pub_time,img_url) values("%s","%s","%s","%s","%s","%s")''' % (dic['index'], dic['title'], dic['actor'], dic['score'], dic['pub_time'], dic['img_url'],)cursor.execute(sql)  # 执行sql语句并返回受影响的行数# # 提交
    conn.commit()# 关闭游标
    cursor.close()# 关闭连接conn.close()

(6):主程序及运行

def main(url):html = get_one_page(url)for item in parse_one_page(html):print(item)commit_to_sql(item)if __name__ == '__main__':urls = ['http://maoyan.com/board/4?offset={}'.format(i) for i in range(0, 100, 10)]# 使用多进程pool = Pool()pool.map(main, urls)

(7):最后的结果

完整代码:

# -*- coding: utf-8 -*-
# @Author  : FELIX
# @Date    : 2018/4/4 9:29import requests
from requests.exceptions import RequestException
import re
import pymysql
import json
from multiprocessing import Pool# 连接数据库
def commit_to_sql(dic):conn = pymysql.connect(host='localhost', port=3306, user='wang', passwd='123456', db='maoyantop100',charset='utf8')cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 设置游标的数据类型为字典sql = '''insert into movies_top_100(mid,title,actor,score,pub_time,img_url) values("%s","%s","%s","%s","%s","%s")''' % (dic['index'], dic['title'], dic['actor'], dic['score'], dic['pub_time'], dic['img_url'],)cursor.execute(sql)  # 执行sql语句并返回受影响的行数# # 提交
    conn.commit()# 关闭游标
    cursor.close()# 关闭连接
    conn.close()# 获取一页的数据
def get_one_page(url):# requests会产生异常headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',}try:response = requests.get(url, headers=headers)if response.status_code == 200:  # 状态码是200表示成功return response.textelse:return Noneexcept RequestException:return None# 解析网页内容
def parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?class="name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)  # re.S可以匹配任意字符包括换行items = re.findall(pattern, html)  # 将括号中的内容提取出来for item in items:yield {  # 构造一个生成器'index': item[0].strip(),'title': item[2].strip(),'actor': item[3].strip()[3:],'score': ''.join([item[5].strip(), item[6].strip()]),'pub_time': item[4].strip()[5:],'img_url': item[1].strip(),}# print(items)def write_to_file(content):with open('result.txt', 'a', encoding='utf8')as f:f.write(json.dumps(content, ensure_ascii=False) + '\n')ii = 0def main(url):html = get_one_page(url)for item in parse_one_page(html):global iiprint(ii, item)ii = ii + 1commit_to_sql(item)write_to_file(item)# print(html)if __name__ == '__main__':urls = ['http://maoyan.com/board/4?offset={}'.format(i) for i in range(0, 100, 10)]# 使用多进程pool = Pool()pool.map(main, urls)

转载于:https://www.cnblogs.com/felixwang2/p/8728889.html

爬虫(七):爬取猫眼电影top100相关推荐

  1. 爬虫,爬取猫眼电影Top100的电影名与评分

    ** 爬虫,爬取猫眼电影Top100的电影名与评分 ** import requests import threading import reclass maoyan_top500(threading ...

  2. python爬电影_Python爬虫项目--爬取猫眼电影Top100榜

    本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, ...

  3. 【JAVA爬虫】爬取猫眼电影TOP100并将数据存入数据库

    前几天的简单写了个利用JSOUP进行JAVA爬虫,里面有谈到后续版本会更新数据库操作,所以这次来更新了. 版本更新 此次的版本里数据爬取部分新增了[电影主演-star]和[电影评分-score]部分, ...

  4. 猫眼html源码,50 行代码教你爬取猫眼电影 TOP100 榜所有信息

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 今天,手把手教你入门 Python 爬虫,爬取猫眼电影 TOP100 榜信息. 作者 | 丁 ...

  5. 50 行代码教你爬取猫眼电影 TOP100 榜所有信息

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 今天,手把手教你入门 Python 爬虫,爬取猫眼电影 TOP100 榜信息. 作者 | 丁 ...

  6. 爬虫从头学之Requests+正则表达式爬取猫眼电影top100

    爬取思路 当我们想要爬取一个页面的时候,我们要保证思路清晰,爬虫的思路分四个步骤,发起请求,获取响应内容,解析内容,存储内容.根据这四个内容我们的思路就很清晰.以下为具体步骤 使用requests库爬 ...

  7. python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件

    传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...

  8. python爬虫猫眼电影票房_python爬取猫眼电影top100排行榜

    爬取猫眼电影TOP100(http://maoyan.com/board/4?offset=90) 1). 爬取内容: 电影名称,主演, 上映时间,图片url地址保存到mariadb数据库中; 2). ...

  9. (爬取猫眼电影TOP100的电影信息(含图片、评分等))

    爬取猫眼电影TOP100的电影信息(含图片.评分等) 让我们直接进入正题 1.导入需要的库 2.获取页面 3.分析页面 4.保存文件 全部代码 让我们直接进入正题 对猫眼电影的网站进行分析 其链接为: ...

  10. 利用正则表达式爬取猫眼电影TOP100信息

    本文利用requests库和正则表达式爬取了猫眼电影TOP100电影信息,并将电影封面和标题.主演等文字信息保存在了本地.本文完整代码链接:https://github.com/iapcoder/Ma ...

最新文章

  1. 迈向智慧化 物联网规模应用不断拓展
  2. 怎么解决深入学习PHP的瓶颈?
  3. Android使用VideoView播放本地视频及网络视频Demo
  4. C#中string a=null和string b=区别
  5. 简单谈谈js中的MVC
  6. crontab 日志_聊聊老板让我删除日志文件那些事儿
  7. java pdf 文字_Java给pdf文件添加文字等信息
  8. HibernateCRUD基础框架(1)-实体类
  9. 闽南科技学院计算机分数线,闽南科技学院历年分数线 2021闽南科技学院录取分数线...
  10. 一套包含完整前后端的系统如何在K8S中部署?
  11. 如何使用Erdas裁剪万能地图下载器下载的谷歌卫星地图
  12. “停课不停学”钉钉被刷一星在线求饶,这波公关我给满分
  13. js设置禁止浏览器刷新,右键和F5键
  14. 常用U盘量产工具下载
  15. Codeforce 1296 C. Yet Another Walking Robot
  16. 豪华金色粒子动态logo展示AE视频模板
  17. MIT视频新研究:让7000多人看了48个广告,发现「眼见为实」并不成立
  18. 认认真真推荐几个高质量人工智能方向的公众号
  19. 用Python爬取今日头条,里面的东西统统白送!
  20. python 分词 jieba

热门文章

  1. VINS(二)Feature Detection and Tracking
  2. Swift基础--通知,代理和block的使用抉择以及Swift中的代理
  3. NOI十连测 第三测 T1
  4. JavaScript DOM基础2
  5. ODAC(V9.5.15) 学习笔记(十六)直接访问模式
  6. linux 忘记原来的myql的root的密码
  7. 目标检测之hough forest---霍夫森林(Hough Forest)目标检测算法
  8. 程序员失业一月转行去送外卖,晒出当天收入,还以为看错了
  9. 我的天!!线上千万级大表排序,如何优化?
  10. 为什么大部分的程序员成不了架构师?为什么?