您的位置:首页 > 编程语言 > Python开发

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开发)



这个就是 好多博客上都在用,我碰到的问题就是分组问题。

| 这个符号 在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 进行对比,看书差官方文档,一个字一个字的看,一个单词一个单词去分析。肯定是可以的。
然后 在把 自己写爬虫中可能会碰见的问题,想一遍,给自己多设置障碍。去解决,然后再写爬虫,再去抓取数据,可能会简单很多。老规矩 有什么不懂得留言了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: