码迷,mamicode.com
首页 > 其他好文 > 详细

requests+正则表达式提取猫眼电影top100

时间:2017-05-20 22:41:34      阅读:428      评论:0      收藏:0      [点我收藏+]

标签:ons   asc   data-   返回   表达   tor   exce   对象   重要   

 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)+\n)#这里表示用中文写入,即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)+\n)#这里表示用中文写入,即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)])

 

requests+正则表达式提取猫眼电影top100

标签:ons   asc   data-   返回   表达   tor   exce   对象   重要   

原文地址:http://www.cnblogs.com/themost/p/6883336.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!