手机版

python使用BeautifulSoup和正则表达式来抓取和比较时间网络不同领域的前100部电影

时间:2021-08-26 来源:互联网 编辑:宝哥软件园 浏览:

前言

我将在一年多后毕业。不准备考研就要准备实习和工作,所以没有更新。

因为Python已经自学了很长时间,如果发现长时间没有使用,以前学过的很多方法都会被遗忘。今天,我们计划使用简单的美化组和一点正则表达式来抓取前100部电影。当然,我们不只是用爬行动物来抓取数据。在这种情况下,数据中的许多有用信息都会被忽略。所以抓取数据只是开始,根据意愿分析这些数据可能会带来额外的收益。

注意:我还是Python新手。如果有任何错误,请指正

这次我们在时代网(http://www . mtime.com/top/movie/top 100/)上抓取电影排名,结构简单,抓取方便。

步骤:

1.登顶时代网电影100强、中国电影100强、日本电影100强、韩国电影100强、电影名称、电影介绍、收视率、评价数

2.将抓取的数据保存为csv格式后,取出来使用matplotlib图片库分析比较评论者数量

3.保存结果图像

第一步:爬行

从上图可以看出,电影信息在li节点,发现第一页的地址和后面几页不同,需要判断。

第一页地址是:http://www.mtime.com/top/movie/top100/

第二页的地址是:http://www.mtime.com/top/movie/top100/index-2.html

第三页和后一页的地址与第二页的地址相似,只是网址的数量相应增加,所以可以通过改变数量进行抓取

从bs4导入请求导入美丽的soupimport重新导入CSV #定义爬网函数defget _ infos (htmls,csvname) : #标头头={ ' user-agent ' : ' Mozilla/5.0(windows nt 6.1;Win64X64)苹果WebKit/537.36 (khtml,喜欢壁虎)chrome/65 . 0 . 3325 . 181 safari/537.36 ' } #标志写文件时,判断是否是第一行标志=True #并判断第一页URL。如果I==0: html=html LSE 3360 html=html ' index-{ },则第二页及以下各页的网址为I在(10) :范围内。html。格式(str(I(1))RES=请求。get (html,headers=headers)shoot=beautulsoup(RES . text,Lxml ')all=shoot。选择(' # asynchratingregion li ')#选择网页的Li节点的内容#循环浏览该节点的内容以获得all in all s : paiming=one . div . em . string # Rank name=str(一。选择(' div。mov _ pic a ')#电影名称并字符串列表名称=re.findall '。*?title='(。*?)'.*?名字,re。S)[0] #使用正则表达式提取内容内容=str(一。选择(' div。mov _ con p . mt3’)# comment real content=re . find all('。*?mt3 '(。*?)/p ',内容,re。S)[0] #与P1相同=one.find (name=' span ',attrs={'class' :' total'},text=re.compile(' \ d ')#在两个节点得分,p2=one Attrs={ ' class ' : ' total 2 ' },text=re.compile('。\ d ')#如果p1和p2,判断分数是否为空!=none : P1=P1 . string p2=p2 . string else : P1=' no ' p2=' point ' point=p1p 2 '分钟' numbers=one . find(text=re.compile(' score '))# score number # Save as CSV csvnames=' c : \ \ users \ Lenovo \ desktop \ \ ' csvname '。带有open (csvnames,' a ',编码='utf-8 ')作为f : writer=CSV . writer(f)if flag : writer . writerow((' paiming ',' name ',' realcontent ',' point ',' Numbers ')writer . writerow((paiming,name,realcontent,point,Numbers)) flag=False#调用函数Japan _ html=' http://www.mtime.com/top/movie/top100 _ Japan/' csvname 1=' Japan _ top ' get _ infos(Japan _ html,Csvname1) Korea _ html为了防止这种情况发生,

注:中国电影top100和所有电影top100的代码以上不加,可自行添加。

爬网结果如下:

-

第二步、第三步:导入数据,用matplotlib进行分析,保存分析图片

从matplotlib导入CSV导入pyplot作为PLT #中文乱码处理PLT . rcparams[' font . sans-serif ']=[' Microsoft yahei ']PLT . rcparams[' axes . unicode _减']=false defread _ CSV(csvname): cvfile _ name=' c : \ \ users \ Lenovo \ desktop \ \ ' csvname '。CSV' #打开文件并将其保存在列表中,打开时(csvfile_name,Encoding=' utf-8 ')为f : reader=CSV . reader(f)header _ row=next(reader)name=[]为reader :名称中的行。append (row) #将列表中的非空元素real=[]用于名称3360中的I if len(I)!=0: real.append(i) #移除中文并将数据转换为shaping t=0ss=[]用于real3360ss中的j。追加(int(real[t][4][:-5])t=1 return ss #制作对比图All_plt=read_csv('bs1') #调用函数China _ PLT=read _ CSV(' China _ top ')Japan _ PLT=read _ CSV(' Japan _ top ')Korea _ PLT=read _ CSV(' Korea _ top ')Shu=list(range(1,101)) FIG=PLT。图(DPI=128,图大小=(10,6)) #设置图形界面PLT。SUPLOT (2,1,1) PLT。BAR (Shu,all _ PLT,align='' Label='World ',alpha=0.6) #绘制图形,align指定横坐标在中心,color,alpha指定透明度PLT.bar (shu,China _ PLT,color=' indigo ',label=' China ',alpha=0.4) #绘制图形,color,Label属性用于显示图例标签plt.bar (shu,Japan _ PLT,color=' blue ',label=' Japan ',alpha=0.5) #绘制图形,color,PLT.bar(Label='Korea ',alpha=0.5) #绘制图形,颜色,plt.ylabel('评论数',fontsize=10) #纵坐标标题,字体大小plt.title('不同地区top100电影对比',Fontsize=10) #图形标题plt。 图例(loc='最佳')PLT。绘制(2,1,2) PLT。plot (shu,all _ PLT,线宽=1,c=' green ',label=' world') #绘制图形并指定label属性用于显示图例标签PLT。地块(shu,China _ PLT,线宽=1,c=' indigo ',label=' China ',ls='-')#绘制图形并指定线宽和颜色。plt.plot(shu,Japan_plt,line width=1,c=' green ',label=' Japan ',ls='-') #绘制图形,指定线宽和颜色,plt.plot (shu,Korea _ plt,Line width=1,c=' red ',label=' Korea ',ls=Color,PLT.ylabel ('comments ',fontsize=10) #纵坐标标题,字体大小PLT.title('前100部不同电影' comments comparison ',Fontsize=10) #图形标题PLT。图例(LOC=“最佳”)“PLT”。图例()—— LOC参数选择“最佳”: 0、#自动选择最佳位置“右上”3360 1、“左上”: 2、“左下”: 3、“右下”: 4、“右下”: 5、“左中”: 6、“右中”: 7、“下中”: 8、“上中”: 9、“中”: 10、“”save fig(' c : \ \ users \ Lenovo \ desktop \ \ bs1 . png ')# save pictures PLT . show()# display graphics在这里需要注意的是,保存的csv文件会被读取并显示出来每个电影数据都是一个列表(先称之为有效列表),每个有效列表的前后都有一个空列表,所以在进行下一步之前有必要删除这个空列表

评分数据是字符串类型,有中文,所以遍历去掉中文,转换成int。

上次保存的对比分析图片:

这次用的爬取方法、爬取内容、分析内容都很容易,但是在整理的过程中,我发现自己还存在各种问题,说明还有很大的改进和进步空间。

同时,请指正。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。

版权声明:python使用BeautifulSoup和正则表达式来抓取和比较时间网络不同领域的前100部电影是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。