要抓取的网页https://www.qiushibaike.com/hot/page/1/
1.首先利用request抓取整个网页
from urllib import request
import re
url='https://www.qiushibaike.com/hot/page/1/'
user_agent='Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36' #设置dialing服务器
headers={'User-Agent':user_agent}
response=request.Request(url,headers=headers)
results=request.urlopen(response)
html=results.read().decode('utf-8')
print( html)
2.查看网页源代码,发现段子在两个<div>标签之间,那就好办了,我们用正则匹配。
img_list=re.findall(pattern,html)
print(img_list)
其中,(.?*)可以匹配任意字符串,re.S表示可以换行匹配,真心强大。
抓取结果:
发现有杂质,有一些多余的东西,那我们去掉就好。
my_story=[]
for item in img_list:
story=item.replace("<span>"," ").replace("</span>"," ")
my_story.append(story)
print(my_story)
这下整齐点了,但还是有些不完美,毕竟第一次。
3.接下来保存文件
for txt in my_story:
f=open('f:\\wd.python\\mystory.txt','a')
f.write(str(txt))
f.write('----------------------')
f.close()
虽然有些不完美,总体还行吧。
4.接下来把代码完善,创建一个爬虫类。
# _*_ coding:utf-8 _*_
from urllib import request #导入所需要的库
import re
class Spider:
"""
爬取糗事百科第一页
"""
def __init__(self):
self.enable=True
self.page=1 #从第一页开始
def load_page(self,page): #定义下载器
"""
发送url请求 得到HTML
"""
url='https://www.qiushibaike.com/hot/page/'+str(page)+'/'
user_agent= "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"
headers={'User-Agent':user_agent}
response=request.Request(url,headers=headers)
results=request.urlopen(response)
html=results.read().decode('utf-8') #注意解码格式
pattern=re.compile(r'<div.*?class="content">(.*?)</div>',re.S)
img_list=re.findall(pattern,html)
return img_list
def deal_one_page(self,img_list,page):
"""
处理一页数据
"""
print('********第{}页有以下段子**********'.format(str(page)))
for item in img_list:
item=item.replace("<span>"," ").replace("</span>"," ")
print(item)
self.save_file(item)
print ("第%d 页的段子存储完毕.." %(page))
def save_file(self,txt):
f=open('f:\\wd.python\\mystory.txt','a',encoding='UTF-8')
f.write(txt)
f.write('----------------------')
f.close()
def do_work(self):
"""
提供交互过程,让爬虫子工作
"""
while self.enable: #创建一个循环,从第一页开始,按回车继续,输入quit退出,当self.enable为真时,下载
print('按回车继续')
print('输入quit退出')
command=input()
if (command=='quit'):
self.enable=False
break;
img_list=self.load_page(self.page)
self.deal_one_page(img_list,self.page)
self.page +=1
if __name__=='__main__':""" 创建一个spider 对象"""
my_spider=Spider()
my_spider.do_work()
结果:
好了,这就比较方便了