吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4305|回复: 14
收起左侧

[Python 转载] 小白入坑——利用正则表达式多进程爬取猫眼电影TOP100

[复制链接]
Nicobuss 发表于 2018-6-29 14:59
利用Python3的requests和re库对猫眼电影TOP100进行多进程爬取。
使用的IDLE是Pycharm第一次发帖,如有不足,请见谅。




代码如下:

[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
"""
Created on Tue Jun 26 11:35:42 2018

@author: Nicobuss

爬取的相关信息有:电影名次、电影名称、主演、上映时间、评分

"""

import re
import time
import requests
from multiprocessing import Pool
from http.cookiejar import CookieJar
from requests.exceptions import RequestException

#创建requests回话
s = requests.Session()
#对需要登录或者需要利用cookie登录的,可以使用CookieJar( )这个方法。
s.cookies = CookieJar()

#创建个头文件,里面的用户我习惯使用这个"Baiduspider+"。
header = {
    'user-agent': 'Baiduspider+',
}

#根据url获取HTML文件
def getHTML(url, code='utf-8'):
    try:
        response = s.get(url, headers=header)
        response.raise_for_status()
        response.encoding = code
        return response.text
    except RequestException:
        print('getHTML Error')

#对HTML进行正则表达式处理
def parseHTML(html):
    pattern = re.compile('.*?board-index-.*?">(.*?)</i>.*?class="name">.*?'
                         + '"boarditem-click".*?"{movieId:.*?}">+(.*?)</a>.*?class="star">'
                         + '(.*?)</p>.*?class="releasetime">(.*?)</p>.*?<p class="score">'
                         + '<i class="integer">(.*?)</i><i class="fraction">(.*?)</i></p>', re.S)

 #需要把html字符串化,否则报错:TypeError: expected string or bytes-like object
    items = re.findall(pattern, str(html)) 

    for item in items:
        yield {
            '序号': item[0],
            '电影名': item[1],
            '主演': item[2].strip(),
            '上映时间': item[3],
            '评分': item[4] + item[5],
        }

#把数据保存到本地
def writePAGE(content):
    with open('result.txt', 'a' ) as f:
        f.write(str(content) + '\n')
        f.close()

#编写主函数
def main(page):
    url = 'https://maoyan.com/board/4?offset=' + str(page)
    html = getHTML(url)
    items = parseHTML(html)

    for item in items:
        print(item)
        writePAGE(item)


if __name__ == '__main__':
    start = time.time()

#多进程爬取
    pool = Pool()
    pool.map(main, [page * 10 for page in range(10)])
    pool.close()  # 关闭进程池,不接受新的进程
    pool.join()  # 主进程阻塞等待子进程的退出

    end = time.time()
#打印出最后运行的时间
    print('It spends %s s' % (end - start))


代码思路很简单,简单概括为:
首先利用requests的get方法获取页面的html文件,之后对得到的html文件进行相对应的正则处理,然后把爬取到的数据保存到本地。

代码地址:https://github.com/Newbie-97/Python-Spyider-Combat

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
lushan63 + 1 用心讨论,共获提升!
longyu_w + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
、Psycho + 1 + 1 用心讨论,共获提升!
wushaominkk + 2 + 1 鼓励新人贴

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wushaominkk 发表于 2018-6-29 15:00
加油,,吾爱因你更精彩!
 楼主| Nicobuss 发表于 2018-6-29 17:44
kiki890730 发表于 2018-6-29 16:37
试试Beautiful Soup?

先从最近最基础的学,下一步会尝试使用BeautifulSoup、PyQuery、Selenium库等~~~
 楼主| Nicobuss 发表于 2018-6-29 15:21
torboxin 发表于 2018-6-29 16:23
人生苦短,我用python
kiki890730 发表于 2018-6-29 16:37
试试Beautiful Soup?
 楼主| Nicobuss 发表于 2018-6-29 17:46
torboxin 发表于 2018-6-29 16:23
人生苦短,我用python

Life is short, you need Python~
 楼主| Nicobuss 发表于 2018-6-29 17:48

( ̄▽ ̄)~*
头像被屏蔽
敬哥哥 发表于 2018-6-29 18:25
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| Nicobuss 发表于 2018-6-30 18:25
敬哥哥 发表于 2018-6-29 18:25
大佬。可以弄出成品打包地址吗?

dalao算不上,自己也只是在初学阶段,分享下自己还算是掌握到的知识罢了~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-21 06:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表