好耶!激动人心的时刻就要来了,经过前面一段时间的折腾后,我们总算可以搞搞数据了,开搞!
1、引入库(我也不知道是不是这么叫,不管它)
import urllib.request
2、总体思路,那么这次我们总共是四个函数,一个主函数,三个副函数,主函数负责调用副函数,副函数执行各自的功能,下面依次给出主副函数
(1)主函数
---------------------------------------------------------------------------------------------------------------------------------
def main():
baseurl = "https://movie.douban.com/top250"
#1、爬取网页
datalist = getData(baseurl)
savepath = ".\\豆瓣电影top250.xls"
#3、保存数据
saveData(savepath)
#askURL("https://movie.douban.com/top250?")
--------------------------------------------------------------------------------------------------------------------------------
(2)副函数1
---------------------------------------------------------------------------------------------------------------------------------
def getData(baseurl: object) -> object:
datalist = []
for i in range(0,10): #调用获取页面信息的函数,10次,每次25条
url = baseurl + str(i*25)
html = askURL(url) #保存获取到的网页源码
#2、统一解析数据
return datalist
---------------------------------------------------------------------------------------------------------------------------------
(3)副函数2
---------------------------------------------------------------------------------------------------------------------------------
def askURL(url):
head = {
"User-Agent": "Mozilla/5.0(Windows NT 10.0;Win64;x64) AppleWebKit/537.36(KHTML, likeGecko) Chrome/101.0.4951.54Safari/537.36Edg/101.0.1210 .39"
}
#用户代理,表示告诉豆瓣服务器,我们是什么类型的机器,浏览器(本质上是告诉历览器,我们能接受什么水平的文件内容 )
request = urllib.request.Request(url,headers = head)
html = " "
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
print(html)
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
return html
---------------------------------------------------------------------------------------------------------------------------------
(4)副函数3
---------------------------------------------------------------------------------------------------------------------------------
def saveData(savepath):
print("save.....")
---------------------------------------------------------------------------------------------------------------------------------
最后,我们给它加一个入口
if __name__ == "__main__":
getData("https://movie.douban.com/top250?")
此时,大功基本已经告成,为了加强学习,我们在这里对最后一个入口进行说明。
if __name__ == "__main__":
这是一个控制语句,我们新建一个文档,命名为test1,对其进行理解
print("hello world")
if __name__ == "__main__":
print("hello")
输入以下代码,我们看到运行结果
D:\program\python\python\python.exe D:/program/python/douban/test控制语句.py
hello world
hello
进程已结束,退出代码0
可以看到,该语句无论之前之后的代码全部被执行了
---------------------------------------------------------------------------------------------------------------------------------
我们再建一个文件夹
这次,我们把test1进行引入
import test1
就给这样一行代码,我们来看运行结果
---------------------------------------------------------------------------------------------------------------------------------
D:\program\python\python\python.exe D:/program/python/douban/test2.py
hello world
进程已结束,退出代码0
---------------------------------------------------------------------------------------------------------------------------------
可以看到,在test1中该语句之前的代码并没有被执行,只执行了之后的代码。
if_name_ == “_main_”:的运行原理:
【__name__属性】: __name__属性是Python的一个内置属性,记录了一个字符串。
若是在当前文件,__name__ 是__main__;
若是导入的文件,__name__是模块名。
通过我们的例子可以看到,我们把test1 import到另外一个test2中,在test1中三行代码都能很好的执行,可是在test2中,被import后的test1只执行了if_name_ == "_main_":后面的代码,也就是说,这玩意被加入后分两种情况:
(1)如果在同一个文件下,那它没有影响
(2)如果不在同一个文件下,你将一个文件import到另外一个文件夹中,那么,在该语句存在的那个文件夹中在该语句之前的代码不会执行。