零基础学习Python爬虫_第1页
零基础学习Python爬虫_第2页
零基础学习Python爬虫_第3页
零基础学习Python爬虫_第4页
零基础学习Python爬虫_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第零基础学习Python爬虫--codeing=utf-8--,开头的这个是设置编码为utf-8,写在开头,防止乱码。

然后下面import就是导入一些库,做做准备工作,(sqlite3这库我并没有用到所以我注释起来了)。

下面一些find开头的是正则表达式,是用来我们筛选信息的。

(正则表达式用到re库,也可以不用正则表达式,不是必须的。)

大体流程分三步走:

1.爬取网页

2.逐一解析数据

3.保存网页

先分析流程

1.爬取网页

baseurl就是我们要爬虫的网页网址,往下走,调用了getData(baseurl),

我们来看getData方法

foriinrange(0,10):#调用获取页面信息的函数,10次

url=baseurl+str(i*25)

这段大家可能看不懂,其实是这样的:

因为电影评分Top250,每个页面只显示25个,所以我们需要访问页面10次,25*10=250。

baseurl="/top250start="

我们只要在baseurl后面加上数字就会跳到相应页面,比如i=1时

/top250start=25

我放上超链接,大家可以点击看看会跳到哪个页面,毕竟实践出真知。

然后又调用了askURL来请求网页,这个方法是请求网页的主体方法,

怕大家翻页麻烦,我再把代码复制一遍,让大家有个直观感受

defaskURL(url):

head={#模拟浏览器头部信息,向豆瓣服务器发送消息

"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.122Safari/537.36"

#用户代理,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)

request=urllib.request.Request(url,headers=head)

html=""

try:

response=urllib.request.urlopen(request)

html=response.read().decode("utf-8")

excepturllib.error.URLErrorase:

ifhasattr(e,"code"):

print(e.code)

ifhasattr(e,"reason"):

print(e.reason)

returnhtml

这个askURL就是用来向网页发送请求用的,那么这里就有老铁问了,为什么这里要写个head呢?

这是因为我们要是不写的话,访问某些网站的时候会被认出来爬虫,显示错误,错误代码

418

这是一个梗大家可以百度下,

418I'mateapot

TheHTTP418I'mateapotclienterrorresponsecodeindicatesthat

theserverrefusestobrewcoffeebecauseitisateapot.Thiserror

isareferencetoHyperTextCoffeePotControlProtocolwhichwasan

AprilFools'jokein1998.

我是一个茶壶

所以我们需要“装”,装成我们就是一个浏览器,这样就不会被认出来,

伪装一个身份。

来,我们继续往下走,

html=response.read().decode("utf-8")

这段就是我们读取网页的内容,设置编码为utf-8,目的就是为了防止乱码。

访问成功后,来到了第二个流程:

2.逐一解析数据

解析数据这里我们用到了BeautifulSoup(靓汤)这个库,这个库是几乎是做爬虫必备的库,无论你是什么写法。

下面就开始查找符合我们要求的数据,用BeautifulSoup的方法以及re库的

正则表达式去匹配,

findLink=pile(r'ahref="(.*)"rel="externalnofollow"rel="externalnofollow"')#创建正则表达式对象,标售规则影片详情链接的规则

findImgSrc=pile(r'img.*src="(.*)"',re.S)

findTitle=pile(r'span(.*)/span')

findRating=pile(r'spanproperty="v:average"(.*)/span')

findJudge=pile(r'span(\d*)人评价/span')

findInq=pile(r'span(.*)/span')

findBd=pile(r'pclass=""(.*)/p',re.S)

匹配到符合我们要求的数据,然后存进dataList,所以dataList里就存放着我们需要的数据了。

最后一个流程:

3.保存数据

#3.保存数据

saveData(datalist,savepath)#2种存储方式可以只选择一种

#saveData2DB(datalist,dbpath)

保存数据可以选择保存到xls表,需要(xlwt库支持)

也可以选择保存数据到sqlite数据库,需要(sqlite3库支持)

这里我选择保存到xls表,这也是为什么我注释了一大堆代码,注释的部分就是保存到sqlite数据库的代码,二者选一就行

保存到xls的主体方法是saveData(下面的saveData2DB方法是保存到sqlite数据库):

defsaveData(datalist,savepath):

print("save.......")

book=xlwt.Workbook(encoding="utf-8",style_compression=0)#创建workbook对象

sheet=book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)#创建工作表

col=("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")

foriinrange(0,8):

sheet.write(0,i,col[i])#列名

foriinrange(0,250):

#print("第%d条"%(i+1))#输出语句,用来测试

data=datalist[i]

forjinrange(0,8):

sheet.write(i+1,j,data[j])#数据

book.save(savepath)#保存

创建工作表,创列(会在当前目录下创建),

sheet=book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)#创建工作表

col=("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")

然后把dataList里的数据一条条存进去就行。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论