查看原文
其他

手把手教你爬豆瓣Top250的电影

徐露露 Stata and Python数据分析 2022-03-15

爬虫俱乐部之前推出的线下培训,得到了各位老师的一致好评。为了更加方便大家学习,满足更多Stata用户的学习需求,爬虫俱乐部已隆重推出在线直播课程,请大家奔走相告!课程报名链接:https://ke.qq.com/course/286526#tuin=9735fd2d,详情见推文《爬虫俱乐部隆重推出网上直播课程第一季》

有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

好消息:爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!

小编最近沉迷于python无法自拔,毕竟刚刚接触python,所有的一切都是那么的新鲜。在了解了python的基础之后,就对爬虫深深着迷。于是在网上找了各种经验贴和视频,在这里,小编极力推荐在MOOC上北京理工大学嵩天老师的【Python网络爬虫与信息提取】这门课,老师讲得简单,清晰,非常适合有了一定python的同学来进行学习爬虫。

虽然小编目前还没有上完老师的课,只是跟着老师的敲了代码,但是已经蠢蠢欲动想要自己来爬一个网站了。作为一枚新手,当然会选择豆瓣,因为这个网站不仅没有设置反爬,而且源代码简单,容易操作。

首先介绍一下接下来会经常调用的模块,分别是 requestsre

1.    Requests

Requests模块是一个用于网络访问的模块,通过使用它,可以向站点服务器发送网页请求,相关的信息请戳requests中文使用文档:http://cn.python-requests.org/zh_CN/latest/index.html.

2.    re

正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序员们可以直接调用来实现正则匹配。我们可以用来匹配字符串中的python中使用。详情请戳:https://blog.csdn.net/jb19900111/article/details/20641801.

我们爬取的具体思路为:

1.    得到豆瓣Top250所有的网站链接(allurl())。

2.    从每个网站中获取源代码内容(getHTMLText(url))。

3.    提取网页中符合我们要求的数据信息(getFilmInfo(url))。

4.    将三个函数整合成一个函数(main(filename))。

一、爬取所有的网址(allurl())

我们观察一下豆瓣电影Top250的网址

第一页:

https://movie.douban.com/top250?start=

第一页也可以是:

https://movie.douban.com/top250?start=0&filter=

第二页:

https://movie.douban.com/top250?start=25&filter=

第三页:

https://movie.douban.com/top250?start=50&filter=

通过上面的网站信息我们可以发现,提交的get参数中,只有start=后面的数字会发生变化,而且是有规律地变化,规律为25*(i-1),其中i为当前的页码。

于是我们就可以着手开始写allurl()这个函数了。

def allurl():    html = []
   for i in range(10): url = 'https://movie.douban.com/top250?start='+str(i*25)+'&filter='html.append(url)
   return html

当然在url赋值时,也可以这样操作:

url = 'https://movie.douban.com/top250?start=%d&filter='%(i*25)

即格式化字符串,它能将字符串中的变量单独在尾部列出,减少犯错的概率,方便调试更改。

由于i的取值范围为(0,10),所以在拼接链接时,只需要(i*25)即可,并将每个链接都加到html这个列表中。最终得到结果为:

二、

从每个网页中获取源代码内容(getHTMLText(url))


对于所有的网站,爬取的第一步都是这个。首先通过requests.get()的方法得到关于本次请求的返回包,并放在r这个变量中,r有一个属性变量r.status_code,存储的是本次请求的状态码,如果该值为200,表示访问成功,如果为404或者其他,则表示访问失败。在这里我们就以第一个网页链接为例:

url = 'https://movie.douban.com/top250?start=0&filter='
r = requests.get(url) print(r.status_code)

得到:

这就说明我们可以顺利地访问这个网页,接下来我们就可以得到源代码啦。只需要键入:

print(r.text)

得到:

该网站的所有内容都在r.text中。

最后将它编写成一个函数:

def getHTMLText(url):    try:        r = requests.get(url,timeout = 30)
       return r.text
   except:        print("获取网页失败")

加入tryexcept是为了运行时的稳定性,如果try部分的代码运行正常,则在执行完毕后不会执行except内的内容,如果出现各种类型的ERROR,则会直接跳转到except下执行代码,而不会因为报错而终止程序的运行。

通过这两个函数getHTMLText()allurl()我们就可以将所有的网页源代码爬取下来,接下来的一篇文章将介绍我们如何使用re模块处理已经得到的网页源代码。并整理出最终的csv数据文件。


注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~


                                   


             文字编辑:赵宇亮

  技术总编:刘贝贝


往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6.Hello,MySQL-odbc exec查询与更新

7.Python第一天

8.Python第二天

9.事件研究大放送

10.爬虫俱乐部隆重推出网上直播课程第一季





关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存