Python 数据抓取之正则表达式
2016-07-10 20:03
441 查看
前言:最近换工作了 在创业公司待着,公司刚刚成立 需要找些数据,并分析下,“友商”都是怎么吹你比的,那些号称40W平台展示 3K+ 在线医生的 3W+ 能提供服务的在线互联网医疗平台。发现 40W+收录的是谎报了一半(这个我抓取了10次,每次新医生的差距在 2K左右)3K+ 平台在线的除以6 就是他的真实情况,3W+能提供服务的,这个傻子都能看出来 一页 多少个 一共多少页。(表示很气愤。。。)
圆规正转:
抓取这些数据 是我第一次正是 的写Python。环境 MAC+Eclipse+python网络数据抓取这本书。主要的数据筛选用的都是bs4。一个很nice的网络抓取框架。
为什么选择用这个? 因为 Python的re很强大跟JAVA 的不太一样(本人,前期做了一年JAVA WEB 开发,二年Android开发)
![](https://img-blog.csdn.net/20160710194918473?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个就是 好多博客上都在用,我碰到的问题就是分组问题。
| 这个符号 在JAVA 中就是或者 前面的执行到 之后 后面的就不执行了。在 Python中也是 但是跟() 在 JAVA 中就是限定 执行优先级,但是在Python中是分组。
buf =urllib2.urlopen('http://larryguo.com/2014/12/11/Sublime-Text-3-For-Python-Development/'); //网络上随意找的 链接 ,抓取所有的图片
html_txt =buf.read()
# list_img =re.findall(r'(:?(?P<one>http[^<>"]+?)(png))|((?P=one)jpg)', html_txt)
# html_txt ='http://7sbpgs.com1.z0.glb.clouddn.com/03.jpg'
list_img =re.findall(r'(?:http[^<>"]+?)(?:png|jpg)', html_txt)
# list_img =re.search(r'http[^<>"]*?png', html_txt)
# print list_img.group()
for one_img in list_img:
print one_img
print '完毕'
(?:http[^<>"]+?)(?:png|jpg)
(?:......) 就是为了告诉编译器 这些写() 就是提升优先等级的,不进行分组。 for循环中只打印 一个URL
(http[^<>"]+?)(png|jpg) 如果这样 就会认为你分了两组 一个是 http[^<>"]+?
(png|jpg) 会打印出来 (“http://7sbpgs.com1.z0.glb.clouddn.com/01.”,“png”)
分组的好处就是 只过滤你只打印出分组的数据,其他的都会被过滤掉。
# relink = ''
# info = '<a href="http://www.baidu.com">baidu</a>'
# cinfo = re.findall(r'<a
href="([^"<>/].*)">(.*)</a>',info)
# print cinfo
上面的代码 会打印出 地址跟 描述[('http://www.baidu.com', 'baidu')]
确实跟强大啊
想搞明白 (XXX) 这里面是都是代表什么意思,自己找个时间多些DOME 进行对比,看书差官方文档,一个字一个字的看,一个单词一个单词去分析。肯定是可以的。
然后 在把 自己写爬虫中可能会碰见的问题,想一遍,给自己多设置障碍。去解决,然后再写爬虫,再去抓取数据,可能会简单很多。老规矩 有什么不懂得留言了。
圆规正转:
抓取这些数据 是我第一次正是 的写Python。环境 MAC+Eclipse+python网络数据抓取这本书。主要的数据筛选用的都是bs4。一个很nice的网络抓取框架。
为什么选择用这个? 因为 Python的re很强大跟JAVA 的不太一样(本人,前期做了一年JAVA WEB 开发,二年Android开发)
这个就是 好多博客上都在用,我碰到的问题就是分组问题。
| 这个符号 在JAVA 中就是或者 前面的执行到 之后 后面的就不执行了。在 Python中也是 但是跟() 在 JAVA 中就是限定 执行优先级,但是在Python中是分组。
buf =urllib2.urlopen('http://larryguo.com/2014/12/11/Sublime-Text-3-For-Python-Development/'); //网络上随意找的 链接 ,抓取所有的图片
html_txt =buf.read()
# list_img =re.findall(r'(:?(?P<one>http[^<>"]+?)(png))|((?P=one)jpg)', html_txt)
# html_txt ='http://7sbpgs.com1.z0.glb.clouddn.com/03.jpg'
list_img =re.findall(r'(?:http[^<>"]+?)(?:png|jpg)', html_txt)
# list_img =re.search(r'http[^<>"]*?png', html_txt)
# print list_img.group()
for one_img in list_img:
print one_img
print '完毕'
(?:http[^<>"]+?)(?:png|jpg)
(?:......) 就是为了告诉编译器 这些写() 就是提升优先等级的,不进行分组。 for循环中只打印 一个URL
(http[^<>"]+?)(png|jpg) 如果这样 就会认为你分了两组 一个是 http[^<>"]+?
(png|jpg) 会打印出来 (“http://7sbpgs.com1.z0.glb.clouddn.com/01.”,“png”)
分组的好处就是 只过滤你只打印出分组的数据,其他的都会被过滤掉。
# relink = ''
# info = '<a href="http://www.baidu.com">baidu</a>'
# cinfo = re.findall(r'<a
href="([^"<>/].*)">(.*)</a>',info)
# print cinfo
上面的代码 会打印出 地址跟 描述[('http://www.baidu.com', 'baidu')]
确实跟强大啊
想搞明白 (XXX) 这里面是都是代表什么意思,自己找个时间多些DOME 进行对比,看书差官方文档,一个字一个字的看,一个单词一个单词去分析。肯定是可以的。
然后 在把 自己写爬虫中可能会碰见的问题,想一遍,给自己多设置障碍。去解决,然后再写爬虫,再去抓取数据,可能会简单很多。老规矩 有什么不懂得留言了。
相关文章推荐
- 【Python学习笔记】函数式编程:高阶函数
- python filter,map,lambda
- 【Python学习笔记】函数式编程
- python中引入包的时候报错AttributeError: module 'sys' has no attribute 'setdefaultencoding'解决方法?
- python多进程队列的2种实现方法
- Python中iter函数用法简述
- Python KeyError
- python算法——字符串表达式的计算
- Notepad++下Python的自动补全
- 编码和Python的bytearray , bytes
- 深入RandomFroest
- K均值聚类算法(K-Means)
- python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
- Python学习笔记9:Python文件和输入输出
- Python自动化运维开发之paramiko(远程批量管理服务器)
- 【机器学习实验】scikit-learn的主要模块和基本使用
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 批量替换文件夹名称或文件名称中特定字符
- python学习笔记(四)
- python学习笔记(三)