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爬虫实战之Requests+正则表达式爬取猫眼电影Top100