爬取猫眼电影TOP100

发布时间:2018-11-16  栏目:Python  评论:0 Comments

3.抉择实现方式和数量存储位置(存在以mysql 数据库中)

2 分析页面

  首先看一些页面的大体情况,其中【霸王别姬】就是我们如果抓取的栏目,栏目下又分了片略带情,如下面黑色箭头所示。

图片 1

先行押一下页面大致情况,右键【审查元素】

图片 2

好望<dd>标签包裹在各国一个录像之音讯,用正则表达式找到想如果的因素。

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

 

 

梯次捕获的是 排名,地址,名称,主演,时间,整数评分,小数评分。这里我因此字典的款型储存,返回一个生成器。

items = reg.findall(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]
            }

 

据项目基本对象:在猫眼电影中拿top100的录像叫,排名,海报,主演,上映时,评分等爬取下来

  Requests是一个不胜便宜的python网络编程库,用官方的说话是“非转基因,可以安全食用”。里面封装了众多之法子,避免了urllib/urllib2的繁琐。

老三页的URL为:http://maoyan.com/board/4?offset=20

  这无异节省用requests库对猫眼电影之TOP100榜进行抓取。

4.进展数量处理,格式美化,按字段依次排,去丢不必要的空格符

3 写副文件

抓取到电影列表,剩下就是是用影片列表写副文件被,由于返回的凡一个字典对象,可以采用pickle方法开展序列化,但为方便以后的查阅,这里用文件方式保留

def write_to_file(contents):
    c = ""
    with codecs.open("result.txt",'a',encoding="utf-8",errors="ignore") as f:
        for key,value in contents.items():
            c += key + ":" + value +"\t"
        f.write(c + "\n")

 

回去的凡一个字典格式,可是据json方法开展序列化

def write_to_file(contents):
    with codecs.open("result.txt",'a',encoding="utf-8",errors="ignore") as f:
        f.write(json.dumps(contents,ensure_ascii=False) + '\n')

 

中间的dumps方法是拿obj序列化为JSON格式的字符串,这里面要顾的凡编码问题。最后就是是抓取整个榜单了,可以加入多线程策略,最后的完好代码

# -*- coding: utf-8 -*-

import requests,re
import codecs
from requests.exceptions import RequestException
from multiprocessing import Pool

import json
def get_a_page(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException :
        return  None
def parse_a_page(html):
    #排名,地址,名称,主演,时间,评分1,评分2
    reg = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name">'
                     + '<a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>' 
                     + '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
    items = reg.findall(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(contents):#这里面两个方法。一种是用json,一种是转为字符串
    c = ""
    with codecs.open("result.txt",'a',encoding="utf-8",errors="ignore") as f:
        #for key,value in contents.items():
            #c += key + ":" + value +"\t"
        f.write(json.dumps(contents,ensure_ascii=False) + '\n')
        #print c
        #f.write(c + "\n")
def main(offset):
    url = "http://maoyan.com/board/4?offset=%s" %offset
    print url
    html = get_a_page(url)
    for item in parse_a_page(html):
        write_to_file(item)

if __name__ == "__main__":
    '''
    for i in range(10):
        main(i*10)
    '''

    pool = Pool()#多线程
    pool.map(main,[i*10 for i in range(10)])

 

2.分析页面html标签结构,找到数据所在位置

1 获得页面。

 
首先确定要爬取的url为http://maoyan.com/board/4,通过requests模块,打印出页面的信息

def get_a_page(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:#状态码,200表示请求成功
            return response.text #返回页面信息
        return None
    except RequestException :
        return  None

地方是代码和注释,为了预防重复抓取时候出现异常,requests的生出这些,其中RequestException是生的父类,故我们一直导入

from requests.exceptions import RequestException

作为十分处理。这样即便得到了拖欠url地址之网页内容。

正文所云的爬虫项目实战属于基础、入门级别,使用的是Python3.5兑现之。

图片 3

 

 以上也调取的等同页数据,只有TOP10底录像排名,如果需要得到TOP100,则使重新得到URL来构建

 

图片 4

5.开立MySQL数据库,库名movie1表名maoyan,添加我们爬取的6单字段名

运行后跻身MySQL查看写副的多寡

调用主函数,运行后拿走结果如下:

4.代码写入(requests+re+pymysql)

收获页面都是盖10来递增URL为:

图片 5

图片 6

图片 7

图片 8

爬虫原理及步子

图片 9

 

运作结果没拍卖的如下:

图片 10

 

爬虫,就是于网页中爬取自己所需要的事物,如文、图片、视频等,这样我们就是用读取网页,然后取网页源代码,从源代码中用正则表达式进行匹配,把匹配成功的音存入相关文档中。这虽是爬虫的简要原理。

 

 

 以上是爬取猫眼top100完完全全代码,如发生误请多指教。

5.代码调试

 

url='http://maoyan.com/board/4?offset='+str(offset)
需要循环10次即可得到排名前100的电影,并把它写入到数据库中

图片 11

3.解析HTML,用正则表达式匹配字符,为非贪婪模式.*?匹配

图片 12

1.规定抓取的数额字段(排名,海报,电影叫,主演,上映时,评分)

import re,request,pymysql

央一个单页内容将到HTML,定义函数,构建headers,请求成功则代码为200,否则失败重新描绘副代码

图片 13

6.每当python中创造数据库连接,把爬取的数额存储到MySQL

率先页的URL为:http://maoyan.com/board/4

图片 14

规定抓取的页面目标URL:http://maoyan.com/board/4

 

操作步骤

2.请求头域,在网页中查阅headers,复制User-Agent内容

图片 15

次页的URL为:http://maoyan.com/board/4?offset=10

图片 16

1.导入库/模块

运转已相当好之首先页内容

留下评论

网站地图xml地图