title: 网络爬虫实战
date: 2019-03-18 19:28:29
tags:
-
介绍
使用python来编写爬虫简单高效,即使新手也能够很容易的学习,接下来我将要面向新手讲解爬虫的整个过程,接下来讲解python环境的搭建。
-
环境的搭建
- 第一步安装python环境,直接在官网下载即可,网上有很多的python安装教程,照着一步一步的安装即可。
- 第二步检测python是否安装成功,打开windows的命令行模式,输入python来检测python是否安装成功,如果进入交互界面表示安装成功。
- 第三步导入我们需要的一些第三方模块,使用命令pip install requests和pip install bs4,开导入requests和bs4模块
- 第四步再次进入交互界面输入import requests和from bs4 import BeautifulSoup来检测导入第三方模块是否成功。
如果你成功完成了上面的四步,那么我们的编写爬虫的环境就搭建成功了,接下来便是我们的重点,来开始我们的爬虫项目了。
-
开始我们爬虫的第一个项目
我们是不是经常在网上看到一些电影排行榜或者音乐排行榜哪,有的时候我们想要将这些好的电影或者音乐的名字,作者或者上映日期等信息记录下来啊!如果数目少的话我们或许可以找个记事本记录下来,但是当拥有成百上千条记录的话使用人力记录下来是很困难的,因此这便显示出我们爬虫的魅力了,接下来我将使用爬虫来爬取一些数据。
爬取得目标:http://www.9ku.com/qingyinyue/paihang.htm这是一个轻音乐旁行榜的网址我们接下来便是对这个网站上的轻音乐进行爬取。
-
我们可以看到上面列举出了排行榜的一部分音乐,接下来便是将这些音乐信息的排名和名字爬取下来。
-
现在我们的目标已经选定了,然后便是对这个页面的源码进行分析了,右键查看源码,来分析源码。[图片上传失败...(image-92f197-1556958934487)]
-
经过分析我们了解到我们的每个ol标签便包含着40条音乐信息,整个页面的音乐信息便是有ol标签组成的,而每个ol标签里便包含四十个li标签,li标签里便包含排名和音乐的名字,这个页面的大体组成便是这样,现在我们已经了解页面的组成了,接下来便可以开始我们的代码的编写了。
下面便是我们编写的代码了,怎么样看着是不是很简单啊! import requests from bs4 import BeautifulSoup url="http://www.9ku.com/qingyinyue/paihang.htm" response=requests.get(url) data=BeautifulSoup(response.text,"html.parser") data=data.find_all(name='ol') def aa(data): lis=data.find_all(name='li') for i in lis: try: print("名次:",i.span.string," ","音乐名称:",i.font.string) except: print("error") for i in data: aa(i)
然后观察一下代码运行的结果吧 ============== RESTART: C:\Users\Administrator\Desktop\44444.py ============== 名次: 01. 音乐名称: 牧羊曲古筝曲 名次: 02. 音乐名称: 回家 名次: 03. 音乐名称: 献给爱丽丝 名次: 04. 音乐名称: 高山流水 名次: 05. 音乐名称: 梦中的婚礼 名次: 06. 音乐名称: 夜的钢琴曲五 名次: 07. 音乐名称: 梁祝化碟 名次: 08. 音乐名称: 秋日私语 名次: 09. 音乐名称: 茉莉花 名次: 10. 音乐名称: 一首非常好听的瑜伽曲 名次: 11. 音乐名称: 安妮的仙境 名次: 12. 音乐名称: 初雪 名次: 13. 音乐名称: 早晨的阳光 名次: 14. 音乐名称: 月光曲 名次: 15. 音乐名称: 瑜伽音乐静心 醉了自醉 error 名次: 17. 音乐名称: 克罗地亚狂想曲 名次: 18. 音乐名称: 雨中漫步 名次: 19. 音乐名称: 彩云追月 名次: 20. 音乐名称: 渔舟唱晚 名次: 21. 音乐名称: 秘密花园 名次: 22. 音乐名称: 天空之城 名次: 23. 音乐名称: 月光下的凤尾竹 葫芦丝试听 歌曲 版纳傣族歌曲 名次: 24. 音乐名称: 梦中的婚礼 名次: 25. 音乐名称: 夜的钢琴曲(五) 名次: 26. 音乐名称: 水边的阿狄丽娜 名次: 27. 音乐名称: 禅思 error 名次: 29. 音乐名称: 维纳斯与布雷斯 名次: 30. 音乐名称: 轻音乐 - 天籁之音 - 班得瑞 钢琴 名次: 31. 音乐名称: 古筝 渔舟唱晚 名次: 32. 音乐名称: 暖心 钢琴版 名次: 33. 音乐名称: Kiss The Rain 名次: 34. 音乐名称: 月光水岸 .......
上面便是我们得到的一部分数据,现在让我们一起分析一下代码吧。 import requests from bs4 import BeautifulSoup 前两行便是导入我们需要使用到的函数库,这点没有什么好分析的。 url="http://www.9ku.com/qingyinyue/paihang.htm" 第三行表示我们爬取的对象,表示页面的网址。 response=requests.get(url) 这行代码表示我们使用get的方式请求服务器,然后服务器返回给我们一个<class 'requests.models.Response'>类型的对象。 data=BeautifulSoup(response.text,"html.parser") 表示将data.text使用html.parser来进行解析,并返回一个<class 'bs4.BeautifulSoup'>类型的对象。 data=data.find_all(name='ol') 表示匹配标签为ol的所有标签,并将匹配到的内容作为一个列表返回。 for i in data: aa(i) 这里使用一个for循环,来遍历返回列表的每个元素,并将遍历的元素当作函数的参数传递到函数aa(data)内。 def aa(data): lis=data.find_all(name='li') for i in lis: try: print("名次:",i.span.string," ","音乐名称:",i.font.string) except: print("error") 这是一个函数,接收前面那个列表里的元素,然后 lis=data.find_all(name='li') 再进行li标签匹配返回每首音乐信息的列表,然后输出每首音乐的信息,使用i.span.string和i.font.string来返回标签里面的内容。
-
现在让我们更改一下代码,让数据写入到记事本里。
import requests from bs4 import BeautifulSoup url="http://www.9ku.com/qingyinyue/paihang.htm" response=requests.get(url) data=BeautifulSoup(response.text,"html.parser") data=data.find_all(name='ol') fp=open("data.txt","w") def aa(data): lis=data.find_all(name='li') for i in lis: try: string="名次:"+i.span.string+" "+"音乐名称:"+i.font.string+"\n" fp.write(string) print(string) except: print("error") for i in data: aa(i) fp.close()
-
在这里我们仅仅使用了文件的操作,先打开一个文件data.txt,然后将每个音乐的信息拼接到一起,然后写入到文件。
-
当然我们也可以将数据写入数据库,这里仅仅添加了使用python操作数据库的代码,代码如下
import requests from bs4 import BeautifulSoup import pymysql user="sun" password="123456789" host="localhost" database="connect" db=pymysql.connect(host,user,password,database) cursor=db.cursor() url="http://www.9ku.com/qingyinyue/paihang.htm" response=requests.get(url) data=BeautifulSoup(response.text,"html.parser") data=data.find_all(name='ol') fp=open("data.txt","w") def aa(data): lis=data.find_all(name='li') for i in lis: try: sql2="insert into test3(order1,name) values('{}','{}')".format(str(i.span.string),str(i.font.string)) cursor.execute(sql2) db.commit() except: print("error") for i in data: aa(i) fp.close()
-
以上便是我们使用python编写爬虫的部分。
网友评论