最近好多人都在为了学习爬虫而苦恼,不知道该从哪里下手,接下来凯哥就以自己的学习经历给大家讲讲怎样学习爬虫!
说到爬虫,可能很多人觉得他很陌生,凯哥的理解爬虫就是通过一定的技术手段从网络上爬取我们所需要的数据。
静态网页的爬虫
静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。静态网页是相对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。
一般的爬虫课也都是从静态网页开始教学,这类网页的爬虫学起来也相对简单,凯哥以一个简单的例子给大家讲解一下。
<html> <head> <meta charset="UTF-8"> <title>title> head> <body> <h3>学生信息表h3> <table border="1" width="300"> <tr> <td>Notd> <td>Nametd> <td>Gendertd> <td>Agetd> tr> <tr> <td>1001td> <td>张三 td> <td> 男 td> <td>20 td> tr> <tr> <td>1002td> <td>李四 td> <td> 女 td> <td>19 td> tr> <tr> <td>1003td> <td>王五 td> <td> 男 td> <td>21 td> tr> table> body>html>
上面这个是网页源代码,在浏览器里的效果如下图所示:
爬取这样的网页信息,凯哥学会了两种方法,一种是利用正则表达式将其中是数据解析出来,另一种是利用Python自带的BeautifulSoup类库解析数据。
①正则表达式
Python代码如下所示(个人觉得注释写的很详细了,如有不懂的可以私聊我):
import urllib.requestimport reurl = "http://127.0.0.1:5000"resp = urllib.request.urlopen(url) #打开网页链接data = resp.read() #读取网页的数据html = data.decode("utf-8") #将数据转化为utf-8格式rows = [] #定义用于存储数据的数组m=re.search(r"",html) #查询第一个...行n=re.search(r"",html)while(m!=None and n!=None): row=[] start=m.end() #start是的结束位置 end=n.start() #end是的开始位置 t=html[start:end] #t是...包含的字符串 html=html[n.end():] #html[n.end():]是剩余的html a=re.search(r" b=re.search(r"",t) while (a!=None and b!=None): start=a.end() end=b.start() row.append(t[start:end]) #找到一组 t = t[b.end():] #t[b.end():]是本行剩余的部分 a = re.search(r" rows.append(row) #增加一行数据 m = re.search(r"", html) #继续查找下一行. n = re.search(r"", html)for row in rows: print(row)
n=re.search(r"
end=n.start() #end是
n = re.search(r"
其中,re.search(r"", html)是re类库的一个方法,目的就是查找html中的“”字符串。r""就是正则表达式的一种,不了解正则表达式的可以参考这个链接。
以上程序输出结果如下所示:
②BeautifulSoup类库
Python代码如下所示:
import urllib.requestfrom bs4 import BeautifulSoupurl = "http://127.0.0.1:5000"resp = urllib.request.urlopen(url) #打开网页链接data = resp.read() #读取网页的数据html = data.decode("utf-8") #将数据转化为utf-8格式soup = BeautifulSoup(html, "lxml") #构建BeautifulSoup对象datas = soup.find_all("td") #寻找网页中的所有“