跟着某乎玩python(一)

利用Requests+正则表达式爬取猫眼电影

声明:
网上有太多资源学习python,找来找去,有各种技术博客各种技术站点各种公众号,眼花缭乱,摸索很长时间,才发现,大部分时间浪费在“百度一下”,信息检索与浏览实在不该浪费我如此多的精力,因此,决定剑走偏锋,跟着某乎来学,可能会比较杂乱,重点会是python爬虫,数据处理方面,当然最终目标是掌握python,入门机器学习,AI。该系列笔记会优先贴出某乎答主的链接!

本篇“玩python”来源答主链接:

利用Requests+正则表达式爬取猫眼电影,学习全过程记录与体会。

环境配置:

1.系统环境:Ubuntu 14.04 LTS
2.编译环境:Python3.4.3
3.依赖库: requests re json multiprocessing

流程图

Created with Raphaël 2.1.0 请求访问首页 首页解析 生成文档 结束 Error yes no yes no

具体demo:

如下所示,具体注释请参考答主链接!

#!/bin/python3
import requests
from multiprocessing import Pool
from requests.exceptions import RequestException
import re
import json

def get_one_page(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 2345Explorer/8.7.0.16013'
    }

    try:
        response=requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

def parse_one_page(html):
    pattern = re.compile('<dd>.*?board-index.*?">(\d+)</i>.*?data-src="(.*?)".*?</a>.*?name"><a.*?>(.*?)</a>'
                       +'.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
                        +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
    items = re.findall(pattern,html)
    print(items)
    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(content):
    with open('result.txt','a',encoding='utf-8') as f:
        f.write(json.dumps(content,ensure_ascii=False)+'\n')


def main(offset):
    url = 'http://maoyan.com/board'
    html = get_one_page(url)
    for item in parse_one_page(html):       
        write_to_file(item)

if __name__=='__main__':
    pool = Pool()
    pool.map(main,[i*10 for i in range(10)])    

这是github地址

效果:

result.txt是新生成的纯文本文档,存储爬取的主要信息。

回顾

  • 单纯的码代码不过是搬运工,最低级的Ctrl+c Ctrl+v
  • 网页请求使用requests的get方法,设置header,try except 块的使用可以防止程序中断。
  • 网页解析主要采用re模块,正则表达式处理str获取想要关键信息。
  • yield——生成器,荐读:Python yield 使用浅析
  • 字典转json以便存储。
  • 进程池Pool效果不明显,初次使用,可能数据量过小。

思考

re模块过于复杂,可以尝试使用bs解析html。导出的文档排版很不清晰,不便于查看与使用,可以试试生成新的html文件,或者excel表格。

参考学习资料:

Python3 教程 | 菜鸟教程
Python正则表达式 | 菜鸟教程

猜你喜欢

转载自blog.csdn.net/qq_30650153/article/details/78650831