【Python】Requests+正则表达式 爬取猫眼电影TOP100
2018-08-07 21:53
316 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37811192/article/details/81489144
1.先获取到一个页面,状态码200是成功返回
[code]def get_one_page(url): # 获取一个页面 try: response = requests.get(url) if response.status_code == 200: return response.text return None except RequestException: return None
2.解析一个页面,先创建一个正则表达式对象,接着进行正则匹配,然后通过键值对形式存储
[code]def parse_one_page(html): pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a' '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>' '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S) items = re.findall(pattern,html) 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] }
3.写入文件中,encoding=”“和ensure_ascii=''“用来存储中文字符
[code]def write_to_file(content): with open('Top100.txt', 'a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False)+'\n') f.close()
最后附上完整的源代码
[code]import json import requests from requests.exceptions import RequestException import re from multiprocessing import Pool def get_one_page(url): # 获取一个页面 try: response = requests.get(url) 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="(.*?)".*?name"><a' '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>' '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S) items = re.findall(pattern,html) 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('Top100.txt', 'a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False)+'\n') f.close() def main(offset): url = "http://maoyan.com/board/4?offset=" + str(offset) html = get_one_page(url) for item in parse_one_page(html): print(item) write_to_file(item) if __name__ == "__main__": pool = Pool() pool.map(main, [i*10 for i in range(10)])
注:由于使用了线程池,因此不一定按顺序存储。但是速度上快了许多,如果对速度要求不高,期望按顺序存储可以不使用线程池,直接调用main(offset)方法即可!附上效果图:
阅读更多
相关文章推荐
- Python爬虫-爬取猫眼电影Top100榜单
- Python实战---抓取猫眼电影TOP100
- python爬虫实战:抓取猫眼电影TOP100存放到MongoDB中
- 【3月24日】Requests+正则表达式抓取猫眼电影Top100
- Python爬虫之三:抓取猫眼电影TOP100
- python爬虫爬取猫眼电影top100
- python之爬取猫眼电影TOP100
- Python学习记录-爬取猫眼电影top100榜单
- python正则表达式爬取猫眼电影top100
- Requests+正则表达式爬取猫眼电影top100
- python 爬虫抓取猫眼电影 top100 源码
- python抓取猫眼电影top100
- Python爬取猫眼电影TOP100
- Requests+正则表达式爬取猫眼电影TOP100
- 【Python简单爬虫设计】对豆瓣TOP100的电影名及简要的爬取
- requests+正则表达式抓取猫眼top100(待续)
- 猫眼电影Top100实战
- Python爬虫,用于抓取豆瓣电影Top前100的电影的名称
- Python3实战——request+正则表达式:爬取猫眼电影TOP100榜
- 利用requests和正则爬取猫眼电影top100榜单