之前就对爬虫感兴趣,奈何迟迟没有下手,如今,天时地利人和,赶紧入坑。下面先对爬虫做个简单介绍:爬虫,网络爬虫(Crawler)又称网络蜘蛛,或者网络机器人(Robots)。它是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。换句话来说,它可以根据网页的链接地址自动获取网页内容。如果把互联网比做一个大蜘蛛网,它里面有许许多多的网页,网络蜘蛛可以获取所有网页的内容。其优势在于不需要用户轮班值守,能自动化运行,自动判断网页数据的状态,及时更新。
假如你现在面临着一个问题,想做一个关于喜剧电影的调研或者心血来潮想看一部好评拉满的喜剧片。那你是不是会这样:
这样,
疯狂找资源。如果这时,我们可以一下子获取所有想要的资源,自己再慢慢筛选,岂不美哉!口说无凭,先放成果:
这样是不是就一目了然,任君挑选。
好,话不多说,下面开始操作!打开豆瓣喜剧片的网站,进行网页代码查看,右键点击检查,点击网络(net)。
点击网络请求的第一条,再点击预览。第一条网络请求是客户端第一次向服务器请求数据信息,即我们能看到的网页信息。但是我们发现预览中的信息和真实的网页有很大的出入,预览中只有很少一部分的信息,只有大致的框架,电影的内容都没有显示。问题来了,那这些数据去哪了,一个简单的解释:在后面的网络请求里面,这个涉及到服务器渲染和客户端渲染的区别,感兴趣的同学可以去了解一下。那我们如何拿到拥有数据的网络请求呢?点击Fetch,再点击第三个请求。
然后我们就可以拿到页面的这些数据了,例如:title:“美丽人生”、score:“9.6”等等。我们知道了这个数据所在的网络请求,那我们就可以针对这个请求做些手脚,对它进行爬取。
首先,我们得获取这个网络请求的一些信息,点击标头:
这是我们爬虫所需要的,也是最重要的三个信息,请求URL:向服务器发起请求的资源定位系统(去哪里下载什么数据);请求方式:是以什么方式向服务器发起请求;User-Agent:用户代理,可简单理解为用户身份识别标志。
爬取代码:
import requests
import xlwt
url = "https://movie.douban.com/j/chart/top_list"
heads = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33"
}
param = {
"type": "24",
"interval_id": "100:90",
"action": "",
"start": 0,
"limit": 20
}
list_m=[]
for i in range(5):
param["start"]=i*20
res = requests.get(url=url, params=param, headers=heads)
res.encoding="utf-8"
for i in res.json():
list_m.append(i)# 转成列表形式存储
res.close()# 爬取完后把请求关掉
workbook = xlwt.Workbook(encoding = 'utf-8')#创建excel表格
worksheet = workbook.add_sheet("喜剧电影")#创建sheet
col=0
for i in list_m[0]:# 插入表头
worksheet.write(0, col, label=i)
col += 1
row = 1
col = 0
for i in list_m:# 拿到单个json
for j in i:# 拿到单个keys
if type(i[j])==type(list_m):# 如果该values是list类型,则转成字符串形式存储
temp=', '.join(i[j])
worksheet.write(row, col, label=temp)
else:
worksheet.write(row, col, label=i[j])
col+=1
col=0
row+=1
print("爬取完成!")
workbook.save("cinema.xls")
小tip:
1、url中?后面都是参数,可以删去,再用params进行拼接,这样便于之后的爬取操作,例如,本次我需要爬取100条记录,只需修改其中一个start参数即可。
2、User-Agent一定要用自己的!!!
3、借此机会大家可以复习一下xlwt的用法,和json的一些格式操作。
4、上面的两个encoding=“utf-8”,好像我去掉也没什么问题,但是当用到中文的时候最好加上,因为有时候会乱码。
5、感觉学fei了的同学可以试着爬取别的类型电影,验证一下自己的学习成果。
希望能帮助到大家!