整体思路
首先要确定要访问的网址,通过打开网页可以获得。
同时在网页中按Fn+F12进入开发者模式界面,选择Network,进行刷新网页,可以记录网页的请求,将小红点按灭,表示停止记录。
点击下方的请求,可以看到打开的douban网页,点击douban会出现详细信息。
下来列表,在最后能看到User-Agent,这是我们需要的头部信息,需要保存下拉,用这个身份我们可以伪装成浏览器进行服务器访问。
然后通过urllib.request.Request()对我们的信息进行封装,括号中需要填入我们的目标网址和头部信息,头部信息需要用字典键值对的形式进行存储。
再然后我们通过urllib.request.urlopen()的方式将封装好的内容进行打开,将得到的信息存储在字符串中进行打印输出,这就是我们得到的第一个网页的的信息了。
由于不止一个网页,所以我们在爬取网页的时候要通过for循环进行多次爬取,将爬取代码写入for循环的循环体中。
注意:在爬取的时候难免会遇见错误与异常,所以我们要加入异常捕获机制,将爬取网页的部分代码写入try中,将可能发生的异常进行捕获,其中可能打印输出错误代码或者打印输出错误原因。
代码编写
import urllib.request
def main():
baseurl = "https://movie.douban.com/top250?start=" #是我们要访问的基础网页
getData(baseurl) #爬取网页信息的函数,向函数传入网址
def getData(baseurl):
for i in range(0,10): #网页一共250条信息,分10页存储,所以要进行十次访问
url = baseurl + str(i*25) #传入的是基础网址,即打开的第一页,要继续访问需要对baseurl进行改装
html = askurl(url) #进行信息输出的函数,html保存网页源码
#接下来要进行数据逐一分析
def askurl(url):
head = { #头部信息用于伪装
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"
} #注意格式,去掉空格等信息,用户代理,告诉豆瓣服务器我们是什么类型的机器、浏览器(本质上是告诉浏览器我们可以接收什么水平的内容)
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: #可能会出现404等错误
if hasattr(e,"code"): #可以进行条件判断
print(e.code) #错误代码
if hasattr(e,"reason"):
print(e.reason) #错误原因
return html #将内容返回给getData函数
if __name__ =="__main__": #程序入口
main()
可以在程序执行框中看到返回的信息