赞
踩
本demo使用python来爬取淘票票热门电影的相关信息
代码如下:
import requests from requests.exceptions import RequestException from pyquery import PyQuery as pq import json # 获取爬取的页面html代码 def get_one_page(url): headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'} try: response = requests.get(url, headers=headers) if response.status_code == 200: return response.text return None except RequestException: return None # 获取从html里有用的数据 def parse_one_page(html): doc = pq(html) lists = doc('.tab-movie-list').eq(0) titles = lists.find('.bt-l') scores = lists.find('.bt-r') list2 = lists.find('.movie-card-list') authors =list2.find('span:nth-child(1)') actors = list2.find('span:nth-child(2)') types = list2.find('span:nth-child(3)') areas = list2.find('span:nth-child(4)') languges = list2.find('span:nth-child(5)') durations = list2.find('span:nth-child(6)') for index in range(titles.length): yield { 'title': titles.eq(index).text(), 'score': scores.eq(index).text(), 'director': authors.eq(index).text()[3:], 'actor': actors.eq(index).text()[3:], 'type': types.eq(index).text()[3:], 'region': areas.eq(index).text()[3:], 'language': languges.eq(index).text()[3:], 'duration': durations.eq(index).text()[3:], } # 写入本地,以文本形式保存 def write_to_file(content): with open('淘票票热门电影.txt', 'w', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False) + '\n') f.close() # 主函数 def main(): url = 'https://dianying.taobao.com/showList.htm?spm=a1z21.3046609.w2.3.50af112aVyLbGL&n_s=new' html = get_one_page(url) parse_one_page(html) print(parse_one_page(html)) li = [] for item in parse_one_page(html): li.append(item) print(item) write_to_file(li) if __name__=='__main__': main()
1.首先需要安装python环境,直接下载python安装即可
2.这里需要用到requests模块和PyQuery模块,使用 pip install 模块名 安装即可,如果下载过慢或出现错误可以从清华大学镜像拉取安装:使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 模块名 安装即可
3.代码解释
函数 get_one_page 获取要爬取网页的html代码
有些网站的请求可能需要headers参数才能正常访问,所以在请求的时候加上headers的User-Agent参数即可。
首先尝试使用requests模块去请求要爬取的页面,如果状态码返回200,则返回html页面代码,否则抛出异常
函数 parse_one_page 从html代码里获取有用的相关信息,并返回可保存的数据形式
这里使用PyQuery模块,如果熟悉Jquery,那么这个也容易上手,因为其api基本上和Jquery是一样的,使用此模块获取相关数据是很方便的,就像操纵DOM一样,如果使用正则表达式(re模块),就没有那么简单直观了,也不好理解,容易出错。使用PyQuery获取完成之后,使用循环,每循环一次返回一个字典结构,里面定义了相关键名用来保存爬取的对应内容
函数 write_to_file 把爬取的数据以文本的形式保存到本地,这个函数没太多说明的,熟悉python I/O相关api即可,另外里面使用了json模块,将传入的内容以json字符串的形式保存
函数 main 为主函数 其中:url为要爬取的目标网页,li为一个列表,我们循环parse_one_page返回的结果,将每条数据插入li列表,然后将li传入write_to_file函数,最终会返回一个标准json字符串,即一个数组里面包含多个对象的形式,以便他人使用
最后在入口执行主函数,就能得到想要的结果了
4.由于疫情的影响,淘票票电影排行页面没有数据,这里我贴了
总结:python用来写爬虫是很方便的,整个小demo只使用了60行不到的代码就能完成爬取功能。除此之外,python的语法跟javascript语法比较接近,如果熟悉js的,那么学习python也是比较容易的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。