開始進公司實習的一個任務是整理一個網頁頁面上二級鏈接的內容整理到EXCEL中,這項工作把我頭都搞大了,整理了好幾天,實習生就是端茶送水的。前段時間學了爬蟲,於是我想能不能用python寫一個爬蟲一個個頁面抓取然后自動存到EXCEL中。今天完成了第一個頁面的處理,抓取到了所有的二級鏈接。
要爬取初始網頁:http://www.zizzs.com/zt/zzzsjz2017/###
任務:將招生簡章中2017對應的二級頁面的招生計划整理到EXCEL
初始目標:爬取http://www.zizzs.com/zt/zzzsjz2017/### 中招生簡章2017年對應的二級鏈接,爬取到二級鏈接之后再接着往下爬取二級頁面的表格,並存到EXCEL中.
我打算用BeautifulSoup來解析網頁頁面.
BeautifulSoup是Python中的一個HTML/XML解析器,通過定位HTML標簽來格式化和組織復雜網絡. 它可以很好的處理不規范標記並生成剖析樹(parse tree),提供簡單又常用的導航(navigating),搜索以及修改剖析樹的操作.
中文文檔: https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
首先看下我要爬取的網頁源碼:

可以看見我要爬取的表格在圖中紅框圈住的頁面中. 可以用BeautifulSoup的find()方法使用標簽和屬性定位這個表格.
找到表格所在位置之后可以看到我要找的頁面都在class="colspan w9 ds2017" 中, 借用findAll()定位這個內容.
但是print出來是整個內容,而我要提取的是href中的頁面鏈接.

對於這個問題我使用python的正則表達式re.findall()方法來提取鏈接.
使用方法: re.findall(pattern, string, flags=0),第一個參數是你要查找的字符串模式可以用正則表達式設計,第二是整個字符串
要了解python字符串可以看看這篇博文.
http://blog.csdn.net/eastmount/article/details/51082253
可以觀察到我要查找的字符串有些是以空格開頭的,有些不是, 我的正則表達式為:

最后成功抓取到自己想要的鏈接:

后面就是用這些鏈接去抓取表格內容的各個學校的招生信息了。
貼上源碼:
# _*_ coding: UTF-8 _*_ from urllib import request from bs4 import BeautifulSoup import re url = 'http://www.zizzs.com/zt/zzzsjz2017/###' # 這一段是將python urllib偽裝成chrome 瀏覽器,防止被服務器拒絕,原因在我另一篇文章python文章總結里面
def getHTML(url): headers = {'User-Agent':'User-Agent:Mozilla/5.0(Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'} req = request.Request(url,headers = headers) return request.urlopen(req) html = getHTML(url) #得到BeautifulSoup對象 bsObj = BeautifulSoup(html,'lxml') foundLinks = [] #成功找到初始頁面的所有二級鏈接 substr = re.compile("(\s)*(http:\/\/www\.zizzs\.com\/c\/201702\/[0-9]+\.html)") for link in bsObj.find("div",{"id":"tab2_content"}).findAll("",{"class":"colspan w9 ds2017"}): #print(str(link)) if len(re.findall(substr,str(link))) != 0: foundLinks.append(re.findall(substr,str(link))[0][1]) print(foundLinks)
整個程序雖然比較簡單,但是自己對BeautifulSoup和正則表達式還不是很熟悉,還是調試了很久.
