一、介绍
最近在看崔庆才老师的视频,崔大大确实不错,思路和代码书写都很谨慎,我就再码码字吧,方便以后查阅或温习
二、流程
用浏览器打开猫眼电影,分析站点
抓取单页内容
利用Requests请求目标站点,得到单个网页HTML代码,返回结果正则表达式分析
根据HTML代码分析得到的名称、主演、上映时间、评分、图片链接等信息保存至文件
通过文件的形式将结果保存,每一部电影一个结果一行Json字符串开启循环及多线程
对多页内容遍历,开启多线程提高抓取速度
三、代码
import requestsfrom requests.exceptions import RequestExceptionimport reimport jsonfrom 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 Nonedef parse_one_page(html): pattern=re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="(.*?)".*?name"><a' +'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>' +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S) #这鬼东西要仔细 items=re.findall(pattern,html) #print(items) 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('result.text','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) get_one_page(url) html=get_one_page(url) #parse_one_page(html) #print(html) for item in parse_one_page(html): print(item) write_to_file(item)if __name__=='__main__': #main() for i in range(10): main(i*10) '''pool=Pool() pool.map(main,[i*10 for i in range(10)]) 多线程'''
四、最后得到的text文件
作者:1想得美
链接:https://www.jianshu.com/p/b8f4e878cde5
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦