正则表达式简单介绍

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

字符 [a-z]

数字 [0-9] 或 \b

* 匹配前面的子表达式零次或多次

+ 匹配前面的子表达式一次或多次

? 匹配前面的子表达式零次或一次

一个简单爬虫例子

import re
import urllib.request url = "http://mall.csdn.net/coin" savePath = "G:/QQData/" def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read().decode('utf-8')
return html def getImg(html):
reg = r'http:\/\/img.bss.csdn.net\/[0-9]+\.jpg'
imgre = re.compile(reg)
imglist = re.findall(imgre, html)
return imglist; def saveImg(url):
conn = urllib.request.urlopen(url)
file = open(savePath + getFileName(url), 'wb')
file.write(conn.read())
file.close()
return def getFileName(url):
reg = r'[a-z0-9]+\.jpg'
matchObj = re.search(reg, url)
if matchObj:
return matchObj.group()
return html = str(getHtml(url));
imgurls = getImg(html); for imgurl in imgurls:
print(imgurl)
saveImg(imgurl)

这个例子很简单,里面的正则简单的到没有,是爬取CSDN U币商城的图片,很容易看懂。

可以自定义正则和Url的爬虫

from tkinter import *
import re
import urllib.request savePath = "G:/QQData/" class ControllPanel(Frame): default_url = "http://www.xingyongshe.com/man/ddfeijibei"
default_regix = r'<img src="(.+)&amp;w=228&amp;q=90&amp;type=jpg'
__status_label = None #私有属性
url_input = None
regix_input = None def __init__(self, master):
Frame.__init__(self, master, width=360, height=260)
self.master = master
self.pack()
self.add_urlarea()
self.add_regixarea()
self.add_buttonarea()
self.add_statusbar() def add_urlarea(self):
urlAreaFrame = Frame(self)
urlAreaFrame.pack(pady=20)
label = Label(urlAreaFrame, text="网址:")
label.pack(side=LEFT)
self.url_input = Entry(urlAreaFrame, width=40)
self.url_input.insert(0, ControllPanel.default_url)
self.url_input.pack(side=RIGHT) def add_regixarea(self):
regixAreaFrame = Frame(self)
regixAreaFrame.pack()
label = Label(regixAreaFrame, text="正则:")
label.pack(side=LEFT)
self.regix_input = Entry(regixAreaFrame, width=40)
self.regix_input.insert(0, self.default_regix) #注意这里的访问方式和上面方式不同
self.regix_input.pack(side=RIGHT) def add_buttonarea(self):
buttonAreaFrame = Frame(self)
buttonAreaFrame.pack(pady=40)
verify_button = Button(buttonAreaFrame, text="验证正则", command=self.verifyRegix)
verify_button.pack(padx=50, side=LEFT)
start_button = Button(buttonAreaFrame, text="开始爬取", command=self.startRun)
start_button.pack(padx=50, side=RIGHT) def verifyRegix(self):
if self.url_input == None or self.regix_input == None:
return
url = self.url_input.get()
regix = self.regix_input.get()
runfunction = RunFunction(url, regix)
imgurls = runfunction.verifyRegix()
if len(imgurls) > 0:
self.setStatus("有%d张图片可以爬取", len(imgurls))
for imgurl in imgurls:
print(imgurl)
return imgurls def startRun(self):
imgurls = self.verifyRegix()
runfunction = RunFunction(None, None)
size = runfunction.runTask(imgurls)
self.setStatus("爬取了%d张图片放在了" + savePath, size) def add_statusbar(self):
statusBarFrame = Frame(self.master)
statusBarFrame.pack(side=BOTTOM, fill=X)
self.status_label = Label(statusBarFrame, bd=1, relief=SUNKEN, anchor=W)
self.status_label.pack(fill=X) def setStatus(self, format, *args):
if self.status_label == None:
return
self.status_label.config(text=format % args)
self.status_label.update_idletasks()
return def clearStatus(self):
self.status_label.config(text="")
self.status_label.update_idletasks() class RunFunction: def __init__(self, url, regix):
self.url = url
self.regix = regix def getHtml(self, url):
page = urllib.request.urlopen(url)
html = page.read().decode('utf-8')
return html def getImg(self, html, reg):
imgre = re.compile(reg)
imglist = re.findall(imgre, html)
return imglist; def saveImg(self, url):
conn = urllib.request.urlopen(url)
file = open(savePath + self.getFileName(url), 'wb')
file.write(conn.read())
file.close()
return def getFileName(self, url):
reg = r'[a-z0-9]+\.jpg'
matchObj = re.search(reg, url)
if matchObj:
return matchObj.group()
return def verifyRegix(self):
html = str(self.getHtml(self.url))
imgurls = self.getImg(html, self.regix)
return imgurls def runTask(self):
imgurls = self.verifyRegix(self.url, self.regix)
for imgurl in imgurls:
self.saveImg(imgurl)
return len(imgurls) def runTask(self, imgurls):
for imgurl in imgurls:
self.saveImg(imgurl)
return len(imgurls) root = Tk()
root.title("爬虫管理窗口") #让窗口居中显示
scnWidth, scnHeight = root.maxsize()
tmpcnf = '%dx%d+%d+%d'%(308, 101, (scnWidth-308)/2, (scnHeight-101)/2)
root.geometry(tmpcnf) root.maxsize(600, 300)
root.minsize(360, 220)
#root.resizable(False, False) #让窗口尺寸不变 controllPanel = ControllPanel(root)
controllPanel.setStatus("等待爬取……") root.mainloop()
root.destroy()

Stage6--Python简单爬虫的更多相关文章

  1. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  2. Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...

  3. GJM : Python简单爬虫入门(二) [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  4. Python 简单爬虫案例

    Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a ...

  5. Python简单爬虫记录

    为了避免自己忘了Python的爬虫相关知识和流程,下面简单的记录一下爬虫的基本要求和编程问题!! 简单了解了一下,爬虫的方法很多,我简单的使用了已经做好的库requests来获取网页信息和Beauti ...

  6. Python简单爬虫

    爬虫简介 自动抓取互联网信息的程序 从一个词条的URL访问到所有相关词条的URL,并提取出有价值的数据 价值:互联网的数据为我所用 简单爬虫架构 实现爬虫,需要从以下几个方面考虑 爬虫调度端:启动爬虫 ...

  7. python简单爬虫一

    简单的说,爬虫的意思就是根据url访问请求,然后对返回的数据进行提取,获取对自己有用的信息.然后我们可以将这些有用的信息保存到数据库或者保存到文件中.如果我们手工一个一个访问提取非常慢,所以我们需要编 ...

  8. python 简单爬虫(beatifulsoup)

    ---恢复内容开始--- python爬虫学习从0开始 第一次学习了python语法,迫不及待的来开始python的项目.首先接触了爬虫,是一个简单爬虫.个人感觉python非常简洁,相比起java或 ...

  9. python 简单爬虫diy

    简单爬虫直接diy, 复杂的用scrapy import urllib2 import re from bs4 import BeautifulSoap req = urllib2.Request(u ...

  10. Python简单爬虫入门一

    为大家介绍一个简单的爬虫工具BeautifulSoup BeautifulSoup拥有强大的解析网页及查找元素的功能本次测试环境为python3.4(由于python2.7编码格式问题) 此工具在搜索 ...

随机推荐

  1. flask总结05(在 Flask 项目中解决 CSRF 攻击)

    一:安装 flask_wtf pip install flask_wtf 二:设置应用程序的 secret_key,用于加密生成的 csrf_token 的值 # session加密的时候已经配置过了 ...

  2. ui-grid使用详解

    HTML <pre name="code" class="html"><!--ui-grid css--> <link rel=& ...

  3. ZOJ Monthly, January 2019 Little Sub and his Geometry Problem ZOJ4082(模拟 乱搞)

    在一次被自己秀死... 飞机 题目: 给出N,K, Q; 给出一个N*N的矩阵  , 与K个特殊点 , 与Q次查询 , 每次查询给出一个C , 问 在这个N*N矩阵中 , 有多少的点是满足这样的一个关 ...

  4. Bubble Sort Graph CodeForces - 340D || 最长不下降/上升子序列

    Bubble Sort Graph CodeForces - 340D 题意: 给出一个n个数的数列,建一个只有n个结点没有边的无向图,对数列进行冒泡排序,每交换一对位置在(i,j)的数在点i和点j间 ...

  5. c# 多数值区间判断是否有重叠

    /// <summary> /// 金额区间判断帮助类 /// </summary> public static class DecimalRangeHelper { /// ...

  6. [转] 理解SVG transform坐标变换

    http://www.zhangxinxu.com/wordpress/2015/10/understand-svg-transform/

  7. Ubuntu电源键软关机设置

    对于不连接显示器的Ubuntu设备,通过直接拔电源或者长按电源键是普遍的关机方法,但这种方法长期势必会对设备造成损坏. 下面设置电源键软关机(短摁电源按钮关机)的方法可以解决此问题.(默认摁电源键会弹 ...

  8. get 与 post 区别

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...

  9. element-ui Form表单验证

    element-ui Form表单验证规则全解 element的form表单非常好用,自带了验证规则,用起来很方便,官网给的案例对于一些普通场景完全没问题,不过一些复杂场景的验证还得自己多看文档摸索, ...

  10. linux无敌权限之chattr

    chattr 修改文件或者目录的文件属性,添加超级权限 -R 递归修改文件机子目录 -V 显示详细修改的内容 + 在原有的基础上追加参数 — 减参数 = 跟新为指定参数 a append 设定改参数后 ...