案例:使用正则表达式的爬虫
现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了。
现在我们进入段子网:http://duanziwang.com/
根据网页的信息,我们可以爬取段子网的段子内容,代码如下:
#-*- coding:utf-8 -*- import urllib2 import re class Spider: """ 段子网 """ def loadPage(self, page): """ @brief 定义一个url请求网页的方法 @param page 需要请求的第几页 @returns 返回的页面html """ url = "http://duanziwang.com/category/%E7%BB%8F%E5%85%B8%E6%AE%B5%E5%AD%90/" + str(page) + "/" # User-Agent头 user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36' #<h1 class="post-title"><a href="http://duanziwang.com/1362.html">情侣</a></h1> headers = {'User-Agent': user_agent} req = urllib2.Request(url, headers=headers) response = urllib2.urlopen(req) html = response.read() pattern = re.compile(r'(<p>|</p>)') html = pattern.sub("", html) pattern = re.compile(r'<br>') html = pattern.sub("\\n", html) pattern = re.compile(r'<div class="post-content">(.*?)</div>', re.S) item_list = pattern.findall(html) return item_list def printOnePage(self, item_list, page): """ @brief 处理得到的段子列表 @param item_list 得到的段子列表 @param page 处理第几页 """ print item_list print "******* 第 %d 页 爬取完毕...*******" % page for item in item_list: self.writeToFile(item) def writeToFile(self, text): ''' @brief 将数据追加写进文件中 @param text 文件内容 ''' with open("d:/duanzi.txt", 'a') as myFile: myFile.write(text) myFile.write("\r\n-----------------------------------------------------") myFile.close() def doWork(self): ''' 让爬虫开始工作 ''' while self.enable: try: item_list = self.loadPage(self.page) except urllib2.URLError, e: print e.reason continue # 对得到的段子item_list处理 self.printOnePage(item_list, self.page) self.page += 1 # 此页处理完毕,处理下一页 print "按回车继续..." print "输入 quit 退出" command = raw_input() if (command == "quit"): break if __name__ == '__main__': """ ====================== 段子网小爬虫 ====================== """ #定义一个Spider对象 mySpider = Spider() mySpider.page = 1 mySpider.enable = True mySpider.doWork()
- 最后,我们执行我们的代码,完成后查看当前路径下的duanzi.txt文件,里面已经有了我们要的段子。
以上便是一个非常精简使用的小爬虫程序,使用起来很是方便,如果想要爬取其他网站的信息,只需要修改其中某些参数和一些细节就行了。