补发爬虫第一战,正则匹配

本来是要准备发小说爬取得姊妹篇——scrapy,不过鉴于本熊是很理解scrapy的各个部分,所以决定暂时将小说爬取后延,不好意思啦委屈委屈,那么接下来,Python爬虫第一战——正则爬取百度贴吧图片

作为写的熊生中第一个爬虫,其实并没有留下什么美好的记忆,讲真,真的不是一段很友好的旅程


正则表达式,一段很特殊的字符串,用来匹配字符串并对对应字符串进行处理。

这里引用一个教程点击打开链接http://www.runoob.com/python/python-reg-expressions.html(这是笨鸟教程里有关正则的部分),到现在有些正则问题也不是很清楚,就不在这里胡言乱语了,还是直接上内容和代码吧。


这是我的爬取链接http://tieba.baidu.com/p/3815851566?pn=1 (女神吧)之前爬的找不到了。。。尴尬了

我们要爬的就是这种


这种妹纸的图片,分析网页源代码,找到了类似

 src="http://imgsrc.baidu.com/forum/w%3D580/sign=1a2deace7a3e6709be0045f70bc69fb8/c2cd3cf33a87e9508881e58515385343f9f2b496.jpg"
这种代码,下隐藏着不可预知的恩 。。其实就是图片啦。

那么上代码

#coding:utf-8
import re
import urllib    # 导入模块
import time
def getHtml ():           # 定义函数获取网址
    x = 0
    for i in range(1,6):   # 通过循环的方式进行多页爬取
        url='http://tieba.baidu.com/p/3815851566?pn=%d' % i  # 观察发现页数随pn=后的数字变化
        page = urllib.urlopen(url)          # 调用函数打开网页
        html = page.read()                 #读取网页内容
        reg = r'src="(.+?\.jpg)" pic_ext'  # 重中之重,根据网页源码写正则
        imgre = re.compile(reg)          
        imglist = re.findall(imgre,html)   #列表方式获取正则匹配结果
        time.sleep(1)                     
        for imgurl in imglist:
            urllib.urlretrieve(imgurl,'%s.jpg' % x)    
            x+=1

getHtml()   # 调用函数

有关代码的功能就看代码里的注释就好了,还会有另一分礼包,爬取 http://www.thebigdata.cn/ 大数据网站上的所有标题,当然,也是使用正则的,还是老规矩,看任务


就是类似于“我们以前把室内空气净化的事情搞成”,这些小标题。那么分析网页源代码

那些被红框包裹的内容就是我们所需要的内容,那么,上代码

#coding:utf-8
import re
import urllib
url='http://www.thebigdata.cn/'

def getHtml(url):
    page = urllib.urlopen (url)
    html = page.read()
    return html           # 调用函数获取解析网址

def getDSJ(html):         # 定义函数,导入解析后网址
    reg = r'</span><a href="([A-Z].*?\.html)"(.*?)>(.*?)</a>'   # 正则匹配所需内容注意有关大小写匹配的问题、相关字符转义问题和匹配问题
    lsre = re.compile(reg) 
    ls = re.finditer(lsre,html)   # finditer函数以迭代器方式返回数据,findall函数不能同时匹配返回多个结果
    return ls

html = getHtml(url)
ls = getDSJ(html)                 # 分别调用两个函数
fd=open(r'theBigDate2.txt','w+')   # 打开文本
for item in ls :
    fd.write(item.group(1)+'\t'+item.group(3)+'\n')  # 将一三项值存入文本
fd.close()

有关部分代码功能请看注释


这就是我写的有关正则的两个简单的代码,欢迎各位大神批评指教,,THANKS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值