1625-5 王子昂 总结《2017年3月13日》 【连续第163天总结】

A.Python 爬虫

B.昨天做好了CUI的愿望单爬虫,但是由于命令行的编码默认是GB2312的,与python的utf-8不匹配,所以萌生了制作GUI的想法

很简单,因为以前用过Tk的控制,在这个显示程序中完全不需要交互,而只是显示即可

刚开始是爬取完成以后进入mainloop()显示,测试了一下觉得有些迟滞,如果网络环境不好的话显示想必会更加慢

那先显示界面,再进行爬取,然后输出到文本框中不就行了吗。

尝试了一下,直接在mainloop()后添加text.insert()方法,发现没有反应

百思不得其解,明明之前做五子棋的时候也是开始mainloop()以后再更新文本的。检查了代码半天发现,之前的五子棋中的所有insert()方法都是绑定在某个函数,由事件驱动的;而这次是直接一条命令,因此无法执行。

遂查询使用after()(延时器)方法,仍然不行。思考了一下,这次绑定after方法是在mainloop开始之后的,所以绑定失败。于是把after()方法放在mainloop()之前,终于成功。

光秃秃的界面有些丑,再加上如果出现了不熟悉的游戏名字,没有图片来配合会认不出来。于是尝试爬取游戏图标地址并显示在界面中。查了一通,应该先用urllib2模块把图片以二进制下载下来,然后转换成gif格式用label控件显示在界面上

但是第一步,爬取图片链接就出现了问题:在线正则测试的网站对于python似乎有什么看法,在截取的一小段文本中php的正则只需要几百步,python却要几万步。把整个网页的源码放入以后,Python显示timeout,php则是catastrophic backtracking。

查询得知,正则回溯陷阱---由于正则表达式的写法,使得系统需要花费过多的时间和步数去查询。

举一个栗子:

考虑这样一个正则

/(a*)*b/

,用它来匹配”aaaaaaaaaa”(10个a组成的字符串)

花费了6143步才完成!如果再加上一个a呢,变成11个a组成的字符串会怎么样?

变成12287步了,翻了一倍。事实就是这样,当出现以上这种量词嵌套时,如果遭遇最坏情况(最后一个字符才能确实匹配不成功),那么这时正则引擎陷入灾难性回溯,时间复杂度为指数级)。  如果你试着再嵌套一层,9个a组成的字符串就能突破100万步了……

这才是正则表达式的难点和精髓:优化算法。

\d表示数字,\w表示字母,明明用.就可以全部通配,为什么要加以限制呢?---为了节省时间和资源

回溯算法非常方便,但也非常可怕。一旦落入回溯陷阱将会花费大量的时间。

于是图片的地址就爬不下来了,因为它的标识不易提取

其实我觉得使用尾部匹配应该可以快捷一点的,不过不知道为什么在线正则测试的网站似乎出了问题,python完全处理不了整页的源码。

附上代码:

#encoding:utf-8
import urllib2
import re
import Tkinter
top=Tkinter.Tk()
text=Tkinter.Text(width=100)
text.pack()def spider():url='http://steamcommunity.com/id/whklhh/wishlist'
    request=urllib2.Request(url)response=urllib2.urlopen(request)data=response.read()
#    reg=r'<div class="gameListRowLogo">(?:.+?\n.+?){2}src="(.+?)">(?:.*?\n.+?){5}'+\
    reg=r'<div class="discount_block discount_block_inline">.+?\n.+?>(-\d+%)(?:.+?\n.+?){2}¥ (\d+).+?\n.+?¥ (\d+)'+\r'(?:.+?\n.+?){4}href="(.+?)"(?:.+?\n.+?){6}>(.+?)<'
    imgre=re.compile(reg)imglist=re.findall(imgre,data)for pro in imglist:text.insert('end',("%s\n\t现价:%s,原价:%s,折扣:%s,商品页面:%s\n")%(pro[4],pro[2],pro[1],pro[0],pro[3]))
text.after(1,spider)
Tkinter.mainloop()

C. 明日计划

Java 日志

170313-pyGUI爬虫和正则回溯陷阱相关推荐

  1. 正则表达式学习——(2)正则回溯

    参考文章: https://www.zhihu.com/question/48219401/answer/1476436385 https://www.jianshu.com/p/48dc319f68 ...

  2. app.vue里使用data_Python爬虫使用正则爬取网站,正则都不会就别玩爬虫了!

    本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关.本文章是自己学习的一些记录.欢迎各位大佬点评! 源码在GitHub上面,且相关介绍更 ...

  3. php 正则 回溯,PHP正则匹配绕过

    之前没有从机制上去了解过PHP正则匹配绕过具体是怎么一回事,于是主动去网上找了一些资料来加深理解 NFA与正则表达式 常见的正则引擎,被细分为DFA(确定性有限状态自动机)与NFA(非确定性有限状态自 ...

  4. php 正则 回溯,php 正则表达式效率 贪婪、非贪婪与回溯分析

    先扫盲一下什么是正则表达式的贪婪,什么是非贪婪?或者说什么是匹配优先量词,什么是忽略优先量词? 好吧,我也不知道概念是什么,来举个例子吧. 某同学想过滤之间的内容,那是这么写正则以及程序的. $str ...

  5. 懒惰和贪婪-正则回溯

    需要一定的正则基础,并且是基于JS写的文章. 正则表达式是从左往右匹配的.在使用正则表达式的时候我们知道/.*/可以匹配一个字字符串中所有的字符,/.*?/却一个字符都匹配不到./(.*)\d/中的. ...

  6. nginx的正则回溯和灾难性回溯

    正则的回溯 我们先了解一下什么是回溯 https://zhuanlan.zhihu.com/p/27417442 这篇文章将的比较详细,我选取其中一个例子给大家简单介绍一下 当用 /".*& ...

  7. python爬虫使用正则爬取网站

    本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关. 本文章是自己学习的一些记录.欢迎各位大佬点评! 在这里放上我爬取的数据的网页,我将 ...

  8. Python爬虫之正则 BeautifulSoup4解析HTML

    目录: 前言 编码演变历史 1 Charset Character Encoding 2 ASCII字符集与编码 3 中文字符集与编码 4 大一统的Unicode 5 UTF-8编码 6 Python ...

  9. python爬虫(正则获取元素)

    import re import requests import ua_info import random from lxml import etree import json from pprin ...

  10. Python 爬虫 使用正则去掉不想要的网页元素

    在做爬虫的时候,我们总是不想去看到网页的注释,或者是网页的一些其他元素,有没有好的办法去掉他们呢? 例如:下面的问题 第一种情况<ahref="http://artso.artron. ...

最新文章

  1. 帝国cms底部代码哪里改?要修改版权和统计代码
  2. 【开发环境】Windows 安装 PyCharm 开发环境 ( 下载 PyCharm | 安装 PyCharm | 在 PyCharm 中创建 Python 工程 )
  3. 绘图操作(点,线,多边形,徒手多边形等)
  4. bean validation校验方法参数_项目启动时首先校验Spring Boot配置参数
  5. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案
  6. [转]sqlserver 创建分区表
  7. 前景检测算法(十六)--背景减除结束篇
  8. DoTween插件使用
  9. php socket 读网页,PHP webSocket实现网页
  10. java基础下载音乐_抖音上超好听的神曲音乐,Python教你一次性下载
  11. 计算机管理删除打印机驱动,彻底删除打印机驱动的方法
  12. TARA-基于J3061的概念阶段流程
  13. excel表格中身份证信息提取出生年月日,年龄,性别,出生地
  14. 最大的商业价值来自给人自由--------------解放生产力与互联网用户分析之我见
  15. C++~STL容器实例——三国武将阵营管理系统
  16. 动态规划练习三:换钱问题(动态规划概念理解与记忆搜索法概念理解对比)
  17. 关于51单片机驱动DS18B20代码的感想
  18. error LNK2019 ,error LNK2001:无法解析的外部符号,LINK : fatal error LNK1104: 无法打开文件
  19. 2021年中国氨纶行业发展现状及进出口状况分析:氨纶价格创十年新高 [图]
  20. 添加到收藏夹和设置首页代码大全

热门文章

  1. PL/SQL语言简单案例
  2. 广西壮族自治区公安厅信息中心异地容灾系统(三期)采购185万
  3. LibOpenCM3(二) 项目模板 Makefile分析
  4. 星星之火-6:无线通信必须知道的“信号”与傅里叶信号变换
  5. 键盘部分失灵/被锁定解决办法
  6. 在线评判系统java代码_sojV1.0 Online Judge System 在线评判系统是一个 联合开发网 - pudn.com...
  7. jQuery 选择器
  8. 写好英语科技论文的诀窍: 主动迎合读者期望,预先回答专家可能质疑
  9. 威廉玛丽学院计算机专业好吗,威廉玛丽学院计算机科学研究生最新专业排名
  10. linux 删除文件的最后一行