很多朋友对于电影网站源码分享懒人包和电影网站html代码不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
爬取目标
本文将提取猫眼电影TOP100排行榜的电影名称、时间、评分、图片等信息,URL为http://maoyan.com/board/4,提取的结果我们以excel格式保存下来。
准备工作
保证电脑安装了python3.6和已经安装好了requests库、beautifulsoup库和openpyxl库。
前期安装步骤可以参考:https://germey.gitbooks.io/python3webspider/1-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE.html
爬取分析
打开http://maoyan.com/board/4我们会发现榜单主要显示4个数据:电影名、主演、上映时间和评分。
如图所示:
猫眼榜单
网页下滑到最下方可以发现有分页的列表,我们点击一下第二页会发现页面的URL变成了http://maoyan.com/board/4?offset=10,比之前的页面多了一个offset=10的参数,而且页面显示的是排行11-20名的电影。
由此我们可以总结出规律,offset代表了一个偏移量值,如果偏移量为n,则显示的电影序号就是n+1到n+10,每页显示10个。所以我们如果想获取TOP100电影,只需要分开请求10次,而10次的offset参数设置为0,10,20,…,90即可,这样我们获取不同的页面结果之后再用正则表达式提取出相关信息就可以得到TOP100的所有电影信息了。
抓取首页
1importrequests\n2defget_one_page(url):\n3response=requests.get(url)\n4ifresponse.status_code==200:\n5returnresponse.text\n6returnNone\n7defmain():\n8url=’http://maoyan.com/board/4’\n9html=get_one_page(url)\n10print(html)\n11main()\n
这样我们就可以获取首页的源代码了,获取源代码之后我们要对页面进行解析,提取出我们想要的信息。
使用BeautifulSoup进行提取
接下来我们回到网页看一下页面的真实源码,在开发者工具中Network监听(建议使用谷歌浏览器,按F12即可查看网页信息),然后查看一下源代码。如图所示:
源代
码1
注意这里不要在Elements选项卡直接查看源码,此处的源码可能经过JavaScript的操作而和原始请求的不同,我们需要从Network选项卡部分查看原始请求得到的源码。
查看其中的一条源代码如图所示:
源代码2
可以看到电影名、主演、上映时间和评分分别在属性class=”name”、class=”star”、class=”release”和class=”score”的文本中
那么我们可以用BeautifulSoup的方法进行提取:1defparse_one_page(html):\n2soup=bs4.BeautifulSoup(html,’lxml’)\n3获取评分\n9scores=[]\n10targets=soup.find_all(class_=’score’)\n11foreachintargets:\n12scores.append(each.get_text())\n13获取上映时间\n20play_time=[]\n21targets=soup.find_all(class_=’releasetime’)\n22foreachintargets:\n23play_time.append(each.get_text())\n24result=[]\n25length=len(movies)\n26forjinrange(length):\n27result.append([movies[j],scores[j],star_message[j],play_time[j]])\n28returnresult\n
这样我们就成功的将一页的10个电影信息都提取出来了
写入文件
随后我们将提取的结果做成excel表格形式
1defsave_to_excel(result):\n2wb=openpyxl.Workbook()\n3ws=wb.active\n4ws[‘A1’]=’电影名称’\n5ws[‘B1’]=’评分’\n6ws[‘C1’]=’主演’\n7ws[‘D1’]=’上映时间’\n8foriteminresult:\n9ws.append(item)\n10wb.save(‘猫眼电影TOP100.xlsx’)\n
分页爬取
但我们需要爬取的数据是TOP100的电影,所以我们还需要遍历一下给这个链接传入一个offset参数,实现其他90部电影的爬取
1foriinrange(10):\n2headers={\n3’User-Agent’:’Mozilla/5.0(Macintosh;IntelMacOSX10_11_4)AppleWebKit/537.36(KHTML,likeGecko)Chrome/53.0.2785.116Safari/537.36′,\n4}\n5url=’http://maoyan.com/board/4?offset=’+str(i*10)\n6html=get_one_page(url,headers)\n7result.extend(parse_one_page(html))\n
整合代码
到此为止,我们的猫眼电影TOP100的爬虫就全部完成了,再稍微整理一下,完整的代码如下:
1importrequests\n2importbs4\n3fromrequests.exceptionsimportRequestException\n4importopenpyxl\n5defget_one_page(url,headers):\n6try:\n7response=requests.get(url,headers=headers)\n8ifresponse.status_code==200:\n9returnresponse.text\n10returnNone\n11exceptRequestException:\n12returnNone\n13defparse_one_page(html):\n14soup=bs4.BeautifulSoup(html,’lxml’)\n15获取评分\n21scores=[]\n22targets=soup.find_all(class_=’score’)\n23foreachintargets:\n24scores.append(each.get_text())\n25获取上映时间\n32play_time=[]\n33targets=soup.find_all(class_=’releasetime’)\n34foreachintargets:\n35play_time.append(each.get_text())\n36result=[]\n37length=len(movies)\n38forjinrange(length):\n39result.append([movies[j],scores[j],star_message[j],play_time[j]])\n40returnresult\n41defsave_to_excel(result):\n42wb=openpyxl.Workbook()\n43ws=wb.active\n44ws[‘A1’]=’电影名称’\n45ws[‘B1’]=’评分’\n46ws[‘C1’]=’主演’\n47ws[‘D1’]=’上映时间’\n48foriteminresult:\n49ws.append(item)\n50wb.save(‘猫眼电影TOP100.xlsx’)\n51defmain():\n52result=[]\n53foriinrange(10):\n54headers={\n55’User-Agent’:’Mozilla/5.0(Macintosh;IntelMacOSX10_11_4)AppleWebKit/537.36(KHTML,likeGecko)Chrome/53.0.2785.116Safari/537.36′,\n56}\n57url=’http://maoyan.com/board/4?offset=’+str(i*10)\n58html=get_one_page(url,headers)\n59result.extend(parse_one_page(html))\n60save_to_excel(result)\n61if__name__==’__main__’:\n62main()\n
运行结果如下图:
爬取结果
结语
本文参考崔庆才的《Python3网络爬虫开发实战》代码部分将正则表达式解析换成BeautifulSoup解析。
本代码还有改进的地方,比如解析代码时有些代码重复了,使用的单进程爬取速度较慢,最近requests的作者新开发了一个库request-html,集网页获取与解析与一体,使爬取更简单。有兴趣的可以看看官方文档传送门。希望大家多多交流。
福利:私信回复python即可获得python全套资料
彩蛋
各位可以依葫芦画瓢爬取豆瓣TOP250电影
电影网站源码分享懒人包的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于电影网站html代码、电影网站源码分享懒人包的信息别忘了在本站进行查找哦。
