因为对爬虫机制的好奇,所以就找了找资料,做一下这方面的笔记。
网络爬虫是指在互联网上自动爬取网站内容信息的程序,也被称作网络蜘蛛或网络机器人。而之所以叫网络爬虫(Web crawler)也可能是因为它们可以沿着网络爬行。它们的本质就是一种递归方式。其位于许多新式的网络技术领域彼此交叉的中心地带,在这里的“爬行”也只是一种形象化的比喻而已,真正到了实际操作层面是指我们从一个网页跳转到另一个网页,以一种递归的方式来获取我们感兴趣的信息的方法。
在真正爬取信息之前,我会先按照我的习惯理清一下思路:
1、获取数据。这里我是使用了urllib.request.urlopen函数,来获取HTML数据。
2、解析数据。因为单纯的HTML数据对于我们来说是没有什么用的,所以就需要使用BeautifulSoup库来解析获取到的Html文档数据将其转换为Python所能处理的数据结构,中间用到了一些正则表达式。
3、保存数据。因为数据比较少,所以就保存到了一个CSV文件中了。
#-*- coding=utf-8 -*-
#@Time : 2020/7/3 9:18
#@Author : wangjy
#@File : Spider2.py
#@Software : PyCharm
from bs4 import BeautifulSoup
from urllib.request import Request,urlopen
import re
import csv
startUrl="https://movie.douban.com/top250?start=" #定义全局变量url
#获取数据
def GetData(url):
head = { # 伪装成浏览器头部信息,向豆瓣服务器发送消息
"User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64;rv: 77.0) Gecko / 20100101 Firefox / 77.0"
}
request=Request(url,headers=head) #封装好我们的请求信息
html=''
try:
response=urlopen(request) #使用请求来获取HTML文件
html=response.read().decode('utf-8') #选择utf-8的方式来对数据进行解码
except:
print("获取数据失败!")
return html
findLink=re.compile(r'href="(.*?)"') #创建正则表达式对象
findRating=re.compile(r' ')
findMovieName=re.compile(r'(.*)')
#解析数据
def ParseData(startUrl):
dataList=[]
try:
for i in range(0,10):
html=GetData(startUrl+str(i*25))
soup=BeautifulSoup(html,'html.parser') #做一锅美味的汤
data=soup.find_all('div',{'class':'info'})
for item in data:
item=str(item)
link=re.findall(findLink,item)[0]
rate=re.findall(findRating,item)[0]
movieName=re.findall(findMovieName,item)[0]
dataList.append([movieName,rate,link])
except:
print("解析数据失败!")
for item in dataList:
print(item)
return dataList
#保存数据
def SaveData(dataList):
csvFile = open("豆瓣电影T250.csv", 'w+',newline='')
try:
writer = csv.writer(csvFile)
writer.writerow(('电影名字', '电影评分','电影链接'))
rows=len(dataList)
for i in range(0,rows):
writer.writerow(dataList[i])
finally:
csvFile.close()
if __name__ == '__main__':
dataList= ParseData(startUrl)
SaveData(dataList)
实现效果:
注:在bs4的官方文档中对其名字做了一点解释, BeautifulSoup 库的名字取自刘易斯 ·卡罗尔在《爱丽丝梦游仙境》里的同名诗歌,在这里隐喻有化腐朽为神奇之意。
在爬虫的道路上感觉自己还是个小白,但是在整个过程也是学到了不少的东西,了解了一些基本的爬虫现在之后仍感觉很有意思。爬虫的确是一个很好的获取数据的工具,日后有机会会再深入了解一下。
参考资料:《Python网络数据集》《Python爬虫技术5天速成》视频