python爬虫(二)爬取糗事百科

主要用的request,当然还需要用正则匹配



要抓取的网页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>标签之间,那就好办了,我们用正则匹配。


pattern=re.compile(r'<div.*?class="content">(.*?)</div>',re.S)
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()

结果:


好了,这就比较方便了









猜你喜欢

转载自blog.csdn.net/wojiaodabai/article/details/79326458