从零开始写python爬虫
(本文代码、链接较多,用PC打开本文效果更佳~ )
带大家了解一下Python爬虫,写的很简单,仅做抛砖引玉之用
目标网站:猫眼电影TOP100榜
(https://maoyan.com/board/4)
需求分析:获取TOP100电影名以及相应的评分,并且输出为TXT文档
TXT文档字段:电影名\t(制表符)评分\n。
选型:Python,简洁强大,适合新手,类库多
可以预先了解一下Python的基础语法
廖雪峰的Python教程(https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c0000)
了解即可,不需要熟记所有的知识点
所用类库:
bs4:全称beautifulsoup4,是用于从HTML文件中提取数据的Python库。简单来说,这个包的功能就是我们需要的数据(在这里是电影名和相对应的评分)从网页(HTML文件)中提取出来。
另外,值得一提的是,这是少数有官方中文文档的Python库(良心啊):https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
urllib:urllib库在爬虫中的作用,主要是发起请求并接受返回的数据,这是Python的一个官方库
参考文档:
https://docs.python.org/zh-cn/3.6/library/urllib.request.html#module-urllib.request
(未完全汉化)
1.准备工作:
下载python环境,安装编辑器或IDE
IDE推荐JetBrains的PyCharm,和他家的IDEA一样好用!,而且教育版免费!!!。IDE的好处是省心,功能强大,减少了配环境和debug痛苦……
(https://www.jetbrains.com/pycharm/)
编辑器推荐VScode,作为编辑器只要有环境,有插件,什么语言都能写。这篇推送就是在VSCode用markdown写的。(什么?环境怎么配?都用编辑器装B了,配个Python环境也是小意思啦~ 在这里就不说了)
同时也写C\C++\C#的同学,用VS2017也是可以的。
在这里笔者使用了Pycharm作为Python的IDE。
2.) 安装类库——pip的使用
pip 是 Python 包管理工具,该工具提供了对Python 包的查找、载入、安装、卸载的功能。Python 2.7.9 + 或 Python 3.4+ 以上版本自带 pip 工具。
pip使用方法详见:(http://www.runoob.com/w3cnote/python-pip-install-usagehtml)
在这里主要是使用命令
具体步骤:
① 打开CMD或者是Powershell
② 切换到Python的安装目录 命令:
③ 输入安装完成后 再输入最后再输入
(我这里已经安装urllib3,所以显示的是已安装)
至此,我们安装环境就配置完成,接下来就进入到分析网页环节。
2.分析网页
在这个简单的爬虫中,我们所需要了解的主要是url链接和dom标签的结构。
1.) url链接
提取每一页的URL链接
第一页:https://maoyan.com/board/4?offset=0
第二页:https://maoyan.com/board/4?offset=10
第三页:https://maoyan.com/board/4?offset=20
我们可以看出来,每一个URL的差异仅仅是后数字的不同。第一页为0,之后每翻一页,该数字递增10。我们将利用这个特性构建爬虫所需要的url链接。
我们将使用这些构建好的链接,用urllib3库对访问服务器,抓取我们所需要的HTML文件。
对于想知道URL为什么是这样写的同学,可以参见wiki百科:https://zh.wikipedia.org/wiki/统一资源定位符
(其实还有一种url的风格是RESTful,在这里就不展开说了。 又可以水一篇推送了2333333)
2.) 网页结构
(想详细学习的同学可以直接去看BeautifulSoup包的文档)
拿到HTML文件后,需要提取出有用的信息。
比如我们要查看大闹天宫的排名,电影名,评分。在这里,我们需要通过相应字段所在的元素的标签,以及标签所带的CSS选择器,获取我们所需的数据。
我们需要使用chorme的检查功能查看网页的源代码
打开之后,找到电影名称和分数所对应的标签
我们可以看出来,我们的电影名字在一个下的 标签内。同样,其他的字段所对应的标签,我们也可以用这个方法找到。
接下来,我们将利用这些字段所对应的标签,利用beatutifulsoup包对标签内的字符串进行提取,即可获得我们的所需的信息
以上,编程的大致思路就是这样,下面开始写程序。
3.写代码
importurllib.request
frombs4importBeautifulSoup
importlxml
##############
# 类库导入 #
##############
defgetdata(url,fileObject):headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}#构建请求头req=urllib.request.Request(url,headers=headers,method='GET')#调用urllib方法下的request方法#req的参数:url请求连接 header构建请求头 method请求方法Response=urllib.request.urlopen(req)#接受请求的回复TEXT=Response.read().decode('utf-8')#提取回复的html,并且转化为utf-8格式soup=BeautifulSoup(TEXT,"lxml")#调用beautifulsoup模组,将提取的HTML转换为可以搜索的soup对象names=soup.find_all("p",class_="name")score=soup.find_all("p",class_="score")#利用find_all方法,搜索出我们所需要的内容(详见bs4的文档)stirng=""fora,binzip(names,score):forcina.stripped_strings:string=str(c)+"\t",fordinb.stripped_strings:string="".join(tuple(string))+d string+='\n'fileObject.write(string)#将find_all内的内容迭代出来,组成字符串,并且写入文件
n=
urls="https://maoyan.com/board/4?offset="
#构建url
fileObject=open('top100电影.txt','a',encoding="utf-8")
#创建文件对象
whilen
fileObject.close()
#关闭文件对象
4.爬取数据
最后数据文件就是这个样子啦
接下来大家可以拷贝到Excel尝试进行简单的数据分析
比如画一个直方图什么的
在这里就不详细说了
5.结语
说了这么多,还是要靠大家拿起IDE和编辑器,尝试一下~ 看文档~ 看源码~ 这样才能有所提高,共勉之~
领取专属 10元无门槛券
私享最新 技术干货