正则提取网页时,常用的函数有:
-re.compile() #建立匹配规则
-re.findall() #返回的符合匹配规则的所有结果的一个列表
-re.split() #删除满足条件的字符或特殊符号实例所采用的知识的:
-采用面向对象的方法
-利用requests对服务器发出请求(一共爬取506页)
-利用正则表达式提取网页信息
-open函数进行读写操作
import requests
import re
class Spider:
#初始化参数
def __init__(self,page):
self.url='http://www.neihan8.com/article/list_5_{}.html'.format(page)
self.headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
}
#下载网页信息
def loadPage(self):
res=requests.get(self.url,headers=self.headers)
res.encoding=res.apparent_encoding
html=res.text
return html
#解析网页--正则表达式
def parse_html(self,html):
pattern=re.compile(r'<div.*?class="f18 mb20">(.*?)</div>',re.S)
item_list=pattern.findall(html)
return item_list
#提取信息--正则表达式
def printOnePage(self,item_list):
for item in item_list:
pattern=re.compile(r'[“…”<b/><p></p><nr/>]')
item=pattern.split(item)
item=''.join(item)
self.writeToFile(item)
#保存信息
def writeToFile(self,text):
with open('duanzi.txt','a',encoding='utf-8') as f:
f.write(text)
def run(self):
#1.获取网页信息
html=self.loadPage()
#2.提取信息
item_list=self.parse_html(html)
#3.保存
self.printOnePage(item_list)
print("保存成功")
if __name__ == '__main__':
for page in range(1,507):
mySpider=Spider(page)
mySpider.run()