zoukankan      html  css  js  c++  java
  • requests+正则表达式提取猫眼电影top100

     1 #requests+正则表达式提取猫眼电影top100
     2 import requests
     3 import re
     4 import json
     5 from requests.exceptions import RequestException
     6 from multiprocessing import Pool
     7 
     8 def get_one_page(url):
     9     headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER'}
    10     try:
    11         response = requests.get(url,headers = headers)
    12         if response.status_code == 200:
    13             return response.text
    14         else:
    15             return None
    16     except RequestException:
    17         return None
    18 
    19 def parse_one_page(html):
    20     pattern = re.compile(r'<dd>.*?board-index.*?">(d+)</i>.*?data-src="(.*?)".*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
    21     results = re.findall(pattern,html)#这一步生成的其实是由元组组成的列表,列表的每一个元素是元组,元组则有前面正则表达式提取的电影名称,地址,演员名,上映时间,排序,评分等,这个列表怎么用,是一个很重要的问题
    22     for result in results:
    23         yield{
    24             'index':result[0],
    25             'add':result[1],
    26             'title':result[2],
    27             'actor':result[3].strip(),
    28             'time':result[4].strip(),
    29             'score':result[5]+result[6]
    30 
    31         }#生成器,返回一个个由键值对组成的字典
    32 
    33 def save_one_page(content):
    34     with open('D://result.txt','a',encoding='utf-8') as f:#当重新打开的时候,由于文件是gbk编码的,默认用gbk去打开,而此时打开的是unicode,所以无法打开,解决的方法是改变目标文件的编码
    35         f.write(json.dumps(content,ensure_ascii=False)+'
    ')#这里表示用中文写入,即gbk,回到上一步
    36         '''如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如xml,但更好的方法是序列化为json,因为,json表现出来就是一个字符串,可以被所有语言读取,
    37         也可以方便地存储到磁盘或者通过网络传输,json不仅是标准格式,并且比xml还快,而且可以在web页面中读取,非常方便。
    38         将Python对象序列化为json用json.dumps(obj),意为把对象倾倒进入json
    39         将json转换成python用json.loads(obj)意为把json对象加载出来'''
    40 
    41 
    42 def main():
    43     for i in range(10):
    44 
    45         url = 'http://maoyan.com/board/4'+'?offset='+str(i*10)
    46         html = get_one_page(url)
    47         results = parse_one_page(html)
    48         for item in results:
    49             print(item)
    50             save_one_page(item)
    51 
    52 if __name__=='__main__':
    53     main()
     1 #多进程版
     2 import requests
     3 import re
     4 import json
     5 from requests.exceptions import RequestException
     6 from multiprocessing import Pool
     7 
     8 def get_one_page(url):
     9     headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER'}
    10     try:
    11         response = requests.get(url,headers = headers)
    12         if response.status_code == 200:
    13             return response.text
    14         else:
    15             return None
    16     except RequestException:
    17         return None
    18 
    19 def parse_one_page(html):
    20     pattern = re.compile(r'<dd>.*?board-index.*?">(d+)</i>.*?data-src="(.*?)".*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
    21     results = re.findall(pattern,html)#这一步生成的其实是由元组组成的列表,列表的每一个元素是元组,元组则有前面正则表达式提取的电影名称,地址,演员名,上映时间,排序,评分等,这个列表怎么用,是一个很重要的问题
    22     for result in results:
    23         yield{
    24             'index':result[0],
    25             'add':result[1],
    26             'title':result[2],
    27             'actor':result[3].strip(),
    28             'time':result[4].strip(),
    29             'score':result[5]+result[6]
    30 
    31         }#生成器,返回一个个由键值对组成的字典
    32 
    33 def save_one_page(content):
    34     with open('D://result.txt','a',encoding='utf-8') as f:#当重新打开的时候,由于文件是gbk编码的,默认用gbk去打开,而此时打开的是unicode,所以无法打开,解决的方法是改变目标文件的编码
    35         f.write(json.dumps(content,ensure_ascii=False)+'
    ')#这里表示用中文写入,即gbk,回到上一步
    36         '''如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如xml,但更好的方法是序列化为json,因为,json表现出来就是一个字符串,可以被所有语言读取,
    37         也可以方便地存储到磁盘或者通过网络传输,json不仅是标准格式,并且比xml还快,而且可以在web页面中读取,非常方便。
    38         将Python对象序列化为json用json.dumps(obj),意为把对象倾倒进入json
    39         将json转换成python用json.loads(obj)意为把json对象加载出来'''
    40 
    41 
    42 def main(pagenum):
    43 
    44 
    45     url = 'http://maoyan.com/board/4?offset='+str(pagenum)
    46     html = get_one_page(url)
    47     results = parse_one_page(html)
    48     for item in results:
    49         print(item)
    50         save_one_page(item)
    51 
    52 if __name__=='__main__':
    53     pool = Pool()
    54     pool.map(main,[x*10 for x in range(10)])
  • 相关阅读:
    将文件读取到内存、打印pe结构
    DIV与IDIV的用法
    内存对齐与硬盘对齐
    逆向笔记013
    自己实现的字符串长度求取、复制、连接
    在一段内存中查找数据
    用Maven构建Mahout项目实现协同过滤ItemCF--集群版
    用Maven构建Mahout项目实现协同过滤userCF--单机版
    从源代码剖析Mahout推荐引擎
    推荐系统第2周--itemCF和userCF
  • 原文地址:https://www.cnblogs.com/themost/p/6883336.html
Copyright © 2011-2022 走看看