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

Posted 道高一尺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)+\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的主要内容,如果未能解决你的问题,请参考以下文章

[爬虫]requests+正则表达式爬取猫眼电影TOP100

Python | requests+正则表达式爬取猫眼电影TOP100

Python实战之如何爬取猫眼电影排行?本文详解

Python爬虫实战之Requests+正则表达式爬取猫眼电影Top100

requests+正则爬取猫眼电影并将数据存储到mysql数据库

00_抓取猫眼电影排行TOP100