爬虫(正则)——爬neihan8
工具:python3
步骤:
1)定义spider类,将具体功能封装成方法
2)观察html页面,写好正确的正则表达式来找到符合规则的文字
3)写一个方法测试一下,保证每写好一个都是对的
4)加入提示语,完善每个方法
5)得到的页面发现乱码,需要将response进行decode,尝试utf-8提示 错误,gbk得到想要的页面!开心!
# coding:utf-8 import urllib.request import re class Spider: def __init__(self): # 初始化其实页面 self.page = 1 # 爬取开关,true继续爬取 self.switch = True def loadPage(self): """ 下载页面 """ print("正在下载数据。。。。。。") url = "http://www.neihan8.com/article/list_5_" + str(self.page) + ".html" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36", } request = urllib.request.Request(url, headers=headers) html = urllib.request.urlopen(request).read() # 获取每页的HTML源码字符串 html = html.decode("gbk") # 创建正则表达式规则,匹配每页里的段子内容,re.S表示匹配全部字符串内容 pattern = re.compile('<div\sclass="f18 mb20">(.*?)</div>', re.S) # 返回所有段子的列表 content_list = pattern.findall(str(html)) self.dealPage(content_list) def dealPage(self, content_list): """ 处理每页的段子 :return: """ for item in content_list: item = item.replace("<p>","").replace("<br />","").replace("</p>","") self.writePage(item) print("正在写入数据。。。。。。") def writePage(self,item): """ 把每条段子逐个写入文件 """ with open("duanzi.txt","a") as f: f.write(item) def startWork(self): """ 控制爬虫运行 :return: """ while self.switch: self.loadPage() commend = input("如果继续爬取请按回车(退出按q)") if commend =="q": self.switch = False # 每次循环页面+1 self.page += 1 if __name__ == "__main__": duanziSpider = Spider() duanziSpider.startWork()