豆瓣影片TOP250爬取与分析
我会把每次在网络上做的爬虫和数据分析都发上来,至少每周一次,这既是为了督促自己,也是希望能把自己遇到的问题及解决方法和大家分享。
爬取网页
这次爬虫使用的是pyquery和requests,requests主要是用来获取图片的字节信息的,没在pyquery中找到,知道的朋友也可以说一下,大家一起进步~!
因为豆瓣电影中比较友好,所以我只设置了一个伪装浏览器的headers就开始爬取了,很顺畅地获取到了网页信息。
接下来是解析网页了,因为影片信息都在单独
- 中,所以一次获取一个页面所有影片的
- ,接下来再进行遍历,把每部影片中的信息提取出来。
-
def get_html(url): # 获取页面 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" } # 构建请求头 doc = pq(url, headers=headers) # 请求页面,获取返回url的html return doc def parse_html(doc): # 解析页面 li_list = doc(".article .grid_view").find("li") # 获取影片内容所在区域 for item in li_list.items(): # 对同一页中每部影片遍历,获取每部影片相关内容 try: movie_poster_src = item(".item .pic a").find("img").attr("src") # 获取海报的资源地址 movie_poster_b = requests.get(movie_poster_src).content # 获取海报,并将图片转为字节 movie_num = item(".item .pic em").text() # 获取影片排行的文本值 movie_url = item(".item .info .hd a").attr("href") # 获取影片url地址 movie_name_list = item(".item .info .hd .title").text().split("/") # 获取影片名称列表 movie_name = "/".join(clear_strip(movie_name_list)) # 对影片名称去除左右两边空格并以/分开 movie_score = item(".item .info .bd .star .rating_num").text() # 获取影片评分 movie_intro = item(".item .info .bd .quote span").text() # 获取影片简介 movie_info = item(".item .info .bd p").text() # 获取影片中信息集合,利用正则一次获取 movie_director = "".join(clear_strip(re.findall(r"导演:(.*?)\xa0", movie_info))) # 去除左右空格并获取导演信息 movie_star = "".join(re.findall(r"主演:(.*?)\n", movie_info)) # 去除左右空格获取主演信息 movie_year =