本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关。
本文章是自己学习的一些记录。欢迎各位大佬点评!
首先
今天是第一天写博客,感受到了博客的魅力,博客不仅能够记录每天的代码学习情况,并且可以当作是自己的学习笔记,以便在后面知识点不清楚的时候前来复习。这是第一次使用爬虫爬取网页,这里展示的是爬取豆瓣电影top250的整个过程,欢迎大家指点。
这里我只爬取了电影链接和电影名称,如果想要更加完整的爬取代码,请联系我。qq 1540741344 欢迎交流
开发工具: pycharm、chrome
分析网页
在开发之前你首先要去你所要爬取的网页提取出你要爬取的网页链接,并且将网页分析出你想要的内容。
在开发之前首先要导入几个模块,模块描述如下,具体不知道怎么导入包的可以看我下一篇内容
首先定义几个函数,便于将各个步骤的工作分开便于代码管理,我这里是分成了7个函数,分别如下:
@主函数入口
if __name__=="__main__": #程序执行入口 main()
@捕获网页html内容 askURL(url)
这里的head的提取是在chrome中分析网页源码获得的,具体我也不做过多解释,大家可以百度
def askURL(url): #得到指定网页信息的内容 #爬取一个网页的数据 # 用户代理,本质上是告诉服务器,我们是以什么样的机器来访问网站,以便接受什么样的水平数据 head={"User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 84.0.4147.89 Safari / 537.36"} request=urllib.request.Request(url,headers=head) #request对象接受封装的信息,通过urllib携带headers访问信息访问url response=urllib.request.urlopen(request) #用于接收返回的网页信息 html=response.read().decode("utf-8") #通过read方法读取response对象里的网页信息,使用“utf-8” return html
@将baseurl里的内容进行逐一解析 getData(baseURL)
这里面的findlink和findname是正则表达式,可以首先定义全局变量
findlink=r'<a class="" href="(.*"' findname=r'<span class="title">(.*"htmlcode">def getData(baseURL): dataList=[] #初始化datalist用于存储获取到的数据 for i in range(0,10): url=baseURL+str(i*25) html=askURL(url) #保存获取到的源码 soup=BeautifulSoup(html,"html.parser") #对html进行逐一解析,使用html.parser解析器进行解析 for item in soup.find_all("div",class_="item"): #查找符合要求的字符串 ,形成列表,find_all是查找所有的class是item的div data=[] #初始化data,用于捕获一次爬取一个div里面的内容 item=str(item) #将item数据类型转化为字符串类型 # print(item) link=re.findall(findlink,item)[0] #使用re里的findall方法根据正则提取item里面的电影链接 data.append(link) #将网页链接追加到data里 name=re.findall(findname,item)[0] #使用re里的findall方法根据正则提取item里面的电影名字 data.append(name) #将电影名字链接追加到data里 # print(link) # print(name) dataList.append(data) #将捕获的电影链接和电影名存到datalist里面 return dataList #返回一个列表,里面存放的是每个电影的信息 print(dataList)@保存捕获的数据到excel saveData(dataList,savepath)
def saveData(dataList,savepath): #保存捕获的内容到excel里,datalist是捕获的数据列表,savepath是保存路径 book=xlwt.Workbook(encoding="utf-8",style_compression=0)#初始化book对象,这里首先要导入xlwt的包 sheet=book.add_sheet("test",cell_overwrite_ok=True) #创建工作表 col=["电影详情链接","电影名称"] #列名 for i in range(0,2): sheet.write(0,i,col[i]) #将列名逐一写入到excel for i in range(0,250): data=dataList[i] #依次将datalist里的数据获取 for j in range(0,2): sheet.write(i+1,j,data[j]) #将data里面的数据逐一写入 book.save(savepath)@保存捕获的数据到数据库
def saveDataDb(dataList,dbpath): initDb(dbpath) #用一个函数初始化数据库 conn=sqlite3.connect(dbpath) #初始化数据库 cur=conn.cursor() #获取游标 for data in dataList: for index in range(len(data)): data[index]='"'+data[index]+'" ' #将每条数据都加上"" #每条数据之间用,隔开,定义sql语句的格式 sql=''' insert into test(link,name) values (%s) '''%','.join (data) cur.execute(sql) #执行sql语句 conn.commit() #提交数据库操作 conn.close() print("爬取存入数据库成功!")@初始化数据库 initDb(dbpath)
def initDb(dbpath): conn=sqlite3.connect(dbpath) cur=conn.cursor() sql=''' create table test( id integer primary key autoincrement, link text, name varchar ) ''' cur.execute(sql) conn.commit() cur.close() conn.close()@main函数,用于调用其他函数 main()
def main(): dbpath="testSpider.db" #用于指定数据库存储路径 savepath="testSpider.xls" #用于指定excel存储路径 baseURL="https://movie.douban.com/top250" #爬取的网页初始链接 dataList=getData(baseURL) saveData(dataList,savepath) saveDataDb(dataList,dbpath)点击运行就可以看到在左侧已经生成了excel和DB文件
excel可以直接打开
DB文件双击之后会在右边打开
到这里爬虫的基本内容就已经结束了,如果有什么不懂或者想交流的地方可以加我qq 1540741344
以下附上整个代码
import re #网页解析,获取数据 from bs4 import BeautifulSoup #正则表达式,进行文字匹配 import urllib.request,urllib.error #制定URL,获取网页数据 import xlwt import sqlite3 findlink=r'<a class="" href="(.*"' findname=r'<span class="title">(.*"testSpider.db" #用于指定数据库存储路径 savepath="testSpider.xls" #用于指定excel存储路径 baseURL="https://movie.douban.com/top250" #爬取的网页初始链接 dataList=getData(baseURL) saveData(dataList,savepath) saveDataDb(dataList,dbpath) def askURL(url): #得到指定网页信息的内容 #爬取一个网页的数据 # 用户代理,本质上是告诉服务器,我们是以什么样的机器来访问网站,以便接受什么样的水平数据 head={"User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 84.0.4147.89 Safari / 537.36"} request=urllib.request.Request(url,headers=head) #request对象接受封装的信息,通过urllib携带headers访问信息访问url response=urllib.request.urlopen(request) #用于接收返回的网页信息 html=response.read().decode("utf-8") #通过read方法读取response对象里的网页信息,使用“utf-8” return html #返回捕获的网页内容,此时还是未处理过的 def getData(baseURL): dataList=[] #初始化datalist用于存储获取到的数据 for i in range(0,10): url=baseURL+str(i*25) html=askURL(url) #保存获取到的源码 soup=BeautifulSoup(html,"html.parser") #对html进行逐一解析,使用html.parser解析器进行解析 for item in soup.find_all("div",class_="item"): #查找符合要求的字符串 ,形成列表,find_all是查找所有的class是item的div data=[] #初始化data,用于捕获一次爬取一个div里面的内容 item=str(item) #将item数据类型转化为字符串类型 # print(item) link=re.findall(findlink,item)[0] #使用re里的findall方法根据正则提取item里面的电影链接 data.append(link) #将网页链接追加到data里 name=re.findall(findname,item)[0] #使用re里的findall方法根据正则提取item里面的电影名字 data.append(name) #将电影名字链接追加到data里 # print(link) # print(name) dataList.append(data) #将捕获的电影链接和电影名存到datalist里面 return dataList #返回一个列表,里面存放的是每个电影的信息 print(dataList) def saveData(dataList,savepath): #保存捕获的内容到excel里,datalist是捕获的数据列表,savepath是保存路径 book=xlwt.Workbook(encoding="utf-8",style_compression=0)#初始化book对象,这里首先要导入xlwt的包 sheet=book.add_sheet("test",cell_overwrite_ok=True) #创建工作表 col=["电影详情链接","电影名称"] #列名 for i in range(0,2): sheet.write(0,i,col[i]) #将列名逐一写入到excel for i in range(0,250): data=dataList[i] #依次将datalist里的数据获取 for j in range(0,2): sheet.write(i+1,j,data[j]) #将data里面的数据逐一写入 book.save(savepath) #保存excel文件 def saveDataDb(dataList,dbpath): initDb(dbpath) #用一个函数初始化数据库 conn=sqlite3.connect(dbpath) #初始化数据库 cur=conn.cursor() #获取游标 for data in dataList: for index in range(len(data)): data[index]='"'+data[index]+'" ' #将每条数据都加上"" #每条数据之间用,隔开,定义sql语句的格式 sql=''' insert into test(link,name) values (%s) '''%','.join (data) cur.execute(sql) #执行sql语句 conn.commit() #提交数据库操作 conn.close() print("爬取存入数据库成功!") def initDb(dbpath): conn=sqlite3.connect(dbpath) cur=conn.cursor() sql=''' create table test( id integer primary key autoincrement, link text, name varchar ) ''' cur.execute(sql) conn.commit() cur.close() conn.close() if __name__=="__main__": #程序执行入口 main()
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】