最近因为要做python的编程开发的讲座,分享有关爬虫相关的资料,特分享给大家。

需求分析
我们先来看一下需求:获取自1994年至2022年之间,各年度的大陆票房情况,包括年度排名、电影名称和票房总额
我们发现,中国历年来的电影票房都对应着一个 url,而且这个 url 是有规律的
例如:
1994年的中国大陆电影票房网址:http://www.boxofficecn.com/boxoffice1994http://www.http://www.boxofficecn.com/boxofficece1994
1995年的中国大陆电影票房网址:http://www.boxofficecn.com/boxoffice1995
那么我们在提供 url 的时候只需要将最后那部分也就是年份那部分进行修改即可。
代码做了注释,大家应该可以看得懂,直接运行即可。具体代码如下:
# -*- encoding: utf-8 -*- ''' @File : Fetch_movie.py @Time : 2023/10/24 21:53:06 @Author : wanglixin @Version : 1.0 @Contact : wanglixin@erise.com.cn '''
# here put the import lib import requests import bs4 import sys import os
''' 去访问对应的网页并将网页源码下载下来 需要注意网页的编码格式 ''' def get_web(url): header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59"} res = requests.get(url, headers=header, timeout=5) # 查看当前网页的编码格式 # print(res.encoding)
#对网页源码进行编码 content = res.text.encode('UTF-8') return content
''' 对下载下来的网页源码进行解析,然后获取指定内容并存放到一个列表里 ''' def parse_content(content): soup = bs4.BeautifulSoup(content, 'lxml') movie_list = soup.find_all('tr', attrs={'align': 'left'}) print('type(movie_list):',type(movie_list)) ###<class 'bs4.element.ResultSet'> list = [] for i in movie_list: i = i.text.split('\n') i = i[1:len(i)-1] list.append(i) return list
''' 将列表中的内容转换成字典,以键值对的形式存放 ''' def get_content(url): content = get_web(url) list = parse_content(content) dic = {} for i in list: i[1] = i[1].replace(u'\xa0', u' ').replace(u'\u200b', u' ').replace(u'\u200e', u' ') i[2] = i[2].replace(u'\xa0', u' ').replace(u'\u200b', u' ').replace(u'\u200e', u' ') i[3] = i[3].replace(u'\xa0', u' ').replace(u'\u200b', u' ').replace(u'\u200e', u' ') dic[i[0]] = {'年份': i[1], '电影名称': i[2], '票房(万元)': i[3]} return dic
''' 数据保存,需要在当前脚本文件目录下新建一个data目录,保存的电影票房数据都存在此目录下 ''' def data_save(dic,year): script_dir = os.path.dirname(os.path.abspath(__file__)) file_name = script_dir + '/data/' + str(year) + '.csv' with open(file_name, 'w+') as f: f.write('序号,年份,电影名称,票房(万元)\n') for k, v in dic.items(): f.write(k+','+v['年份']+','+v['电影名称']+','+v['票房(万元)']+'\n')
if __name__ == '__main__':
url = 'http://www.boxofficecn.com/boxoffice' for year in range(1994, 2023): new_url = url + str(year) dic = get_content(new_url) print('_____开始获取%s年的票房信息______' %(year)) data_save(dic, year)


暂无评论