Python爬虫教程—python爬取糗事百科详解

可以访问我的网站:http://www.cjluzzl.cn

爬虫功能:

1.爬取糗事百科段子并保存到本地文件

爬取到的文本展示

2.爬取糗事百科上的图片并保存到本地

 

 

先来原代码一睹为快

# -*- coding: utf-8 -*-
'''
Created on 2017年3月4日

@author: cjluzzl
'''

import re
import urllib2
import urllib
import os

def download(url):
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    header = {'User-Agent':user_agent}
    request = urllib2.Request(url,headers=header)
    print '正在下载',url
    try:
        html = urllib2.urlopen(request).read()
    except urllib2.URLError as e:
        print '打开网址 ',url,e.reason    
    
    return html
    
file = open(u"糗事百科.txt",'w+')
html = download('https://www.qiushibaike.com')
if html != None:
    con = re.findall("<span>(.*?)</span>",html)
    total_count = len(con)
    
    
    print '一共有',total_count,'条'
    file.write('一共有'+str(total_count)+'条\n')
    for i in range(1,total_count):
        print '\n这是第',i,'条'
        file.write('\n这是第'+str(i)+'条\n')
        if '<br/><br/>' in con[i]:
            con[i]=con[i].replace('<br/><br/>','\n')
        if '<br/>' in con[i]:
            con[i]=con[i].replace('<br/>','\n')
        print con[i]
        if "<img " in con[i]:
            print u'现在开始爬取图片'
            #imageUrl = con[i][con[i].find('src=')+5:con[i].find('.jpg')+4]
            imageUrl = re.findall('src="(.+?\.jpg)',con[i])
            title = re.findall('alt="(.*?)"',con[i])
            title = str(title[0])
            print title
            filename="D:/Download/" + title +".jpg"
            #print filename
                
            try:
                urllib.urlretrieve(imageUrl[0],unicode(filename,'utf8'))
            except IOError as a:
                print 'error'
        else:
            file.write(con[i]+'\n')
    
   
            
else:
    print '未获取到指定内容,请检查网址无误后重试'
file.close()

先看download函数,用于下载html源码

def download(url):
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    header = {'User-Agent':user_agent}
    request = urllib2.Request(url,headers=header)
    print '正在下载',url
    try:
        html = urllib2.urlopen(request).read()
    except urllib2.URLError as e:
        print '打开网址 ',url,e.reason    
    
    return html

读取段子和图片并写入文件

注意:

 

1.用Firebug查看html,逐渐站看标签,查看内容,注意分析源码编写正则表达式

2.re.findall()方法返回的是列表

3.unicode(filename,'utf8')防止Windows下文件名乱码

 

file = open(u"糗事百科.txt",'w+')#创建本地文件
html = download('https://www.qiushibaike.com') #执行download函数下载HTML
if html != None:
    con = re.findall("<span>(.*?)</span>",html)#获取段子内容
    total_count = len(con)#计算段子总数
    
    
    print '一共有',total_count,'条'
    file.write('一共有'+str(total_count)+'条\n')
    for i in range(1,total_count):
        print '\n这是第',i,'条'
        file.write('\n这是第'+str(i)+'条\n')
        if '<br/><br/>' in con[i]:#<br/>标签转换行
            con[i]=con[i].replace('<br/><br/>','\n')
        if '<br/>' in con[i]:#<br/>标签转换行
            con[i]=con[i].replace('<br/>','\n')
        print con[i]
        if "<img " in con[i]:#判断是否为图片段子
            print u'现在开始爬取图片'
            #imageUrl = con[i][con[i].find('src=')+5:con[i].find('.jpg')+4]
            imageUrl = re.findall('src="(.+?\.jpg)',con[i])
            title = re.findall('alt="(.*?)"',con[i])
            title = str(title[0])
            print title
            filename="D:/Download/" + title +".jpg"
            #print filename
            try:
                urllib.urlretrieve(imageUrl[0],fielname=unicode(filename,'utf8'))
            except IOError as a:
                print 'error'
        else:#文字段子写入文件
            file.write(con[i]+'\n')
    
   
            
else:
    print '未获取到指定内容,请检查网址无误后重试'
file.close()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值