用正则表达式爬取链接和标题

原创 2015年11月19日 18:58:15

1.爬取中国大数据首页的链接和标题

2.出现好多错误,特别是正则表达式

爬取的样式为:


部分源代码:


#coding:utf-8
import re
import urllib
#获取网页
def getHtml(url):
    page=urllib.urlopen(url)
    html=page.read()
    return html
#用正则匹配相应的链接和标题
def getText(html):
    reg=r'</span><a href="((YeJieDongTai|YingYongAnLi|JieJueFangAn|Hadoop|HBase|QiTa|JiShuBoKe)/\d{4,5}\.html)"(.*?)>(.*?)</a>'
    textre=re.compile(reg)
    textlist=re.finditer(textre,html)
    #print type(textlist)测试返回内容的类型,注意finditer和findall的区别
    return textlist

url='http://www.thebigdata.cn/'
html=getHtml(url)
list=getText(html)
#将获取的内容写入文件
a=open(r"D:\Python test\restart.txt",'a+')
for item in list:
    a.write(item.group(1)+item.group(4)+'\n')
    #当以列表形式返回时,读取方式应为:
    #a.write(item[1]+item[4]+'\n')   
a.close() 

小某说:

分享一下自己所犯的奇葩的错误。

1.刚开始写的时候,完完全全按照爬取图片的格式来的,出现一系列错误,后来发现这是不可行的。主要是对urlretrieve()的用法没有掌握清楚。urlretrieve()是将url定位到的html文件下载到本地的磁盘中,这次爬取的内容需要写入文件中。关于urllib模块中的方法可以参考

http://www.cnblogs.com/sysu-blackbear/p/3629420.html

2.然后改变方法重新爬取,正则又出现了很多错误

reg=r'target="_blank" title=(.*?)>'
这个正则爬取出来的内容有缺失,是由于源代码中有的title是写在title=“”的引号里面的,而有的写在了外面。于是便认为匹配时title可有可无,便进行更改

reg=r'target="_blank" title?=?(.*?)>'
这种写法好像很搞笑,主要是没有掌握正则中“?”的用法

?:可以表示匹配零次或一次,即前面的内容可有可无;也可以表示非贪婪匹配。重点在于后者。

常用的非贪婪匹配模式有:

  • *?重复任意次,但尽可能少重复
  • +?重复一次或更多次,但尽可能少重复

3.总之,正则匹配错误还很多。匹配成功后,如上面代码中所示,写入文件时由于有多个分组便又出现错误。主要是findall()和finditer()的区别:

findall():返回所有匹配的字符串,并存为列表,存入文件时使用列表的读取方法。

finditer():返回一个迭代器,存入文件时要调用group()


吼吼哈哈,补上昨天的博客,好开森,可能有写的不好的地方,小某就先闪啦!!


版权声明:本文为博主原创文章,未经博主允许不得转载。

正则表达式匹配URL

最近在做一些关于URL匹配的项目,本来对正则表达式了解的不多,上网搜索了好多前辈写的正则表达式,发现很少能被我使用的,现将我自己写的正则表达式贴出来,供大家参考。 %% 首先,正则表达式:   ...
  • weasleyqi
  • weasleyqi
  • 2012年08月27日 16:35
  • 115228

使用正则表达式过滤url链接

先把代码贴出来吧:                 String cc = "立足农村,传播科技、提升价值,等待您的入住http://t.cn/SXiTPi"; Pattern pattern =...
  • abauch_d
  • abauch_d
  • 2012年08月06日 23:01
  • 11676

超链接的正则表达式匹配

 网络评论中经常出现超链接垃圾现象,我们可以使用正则表达式进行提取可以匹配www.[至少一个字母或数字].[至少一个字母或数字]的任意超链接实际中存在的往往是http://www.[至少一个字母或数字...
  • longronglin
  • longronglin
  • 2008年01月12日 15:41
  • 6971

正则表达式匹配超链接解决方案

正则表达式匹配超链接 想把下载的网页中的所有超链接全部删除,例如hibaiduworld 最后只剩hiworld 想这么用 (c++的正则库,但是在那个板块问没人回答,在这里问问(*^__^*)...
  • u012467492
  • u012467492
  • 2015年07月21日 13:53
  • 3111

正则表达式取HTTP链接

测试文本: 静音合肥美菱BCD-128L冷藏冷冻冰箱 双门冰箱特龙家用电冰箱 送礼    价格:888.00元    最近销售:36件   地址:http:/ w/url.cn/25GRqU ;mo...
  • ArvinStudy
  • ArvinStudy
  • 2012年05月08日 17:41
  • 2310

初用正则表达式爬取图片

#coding:utf-8 #导入正则模块 import re import urllib #获取网页 def getHtml(url): #打开该网页 page=urllib.url...
  • yedoubushishen
  • yedoubushishen
  • 2015年11月17日 21:18
  • 2073

Python抓取新闻标题和链接

#-*-coding:utf-8-*- import re from urllib import urlretrieve   from urllib import urlopen   #获取网页信...
  • ccy950903
  • ccy950903
  • 2015年09月23日 21:23
  • 1278

正则表达式的简单应用:使用正则表达式采集腾讯新闻

正则表达式的简单应用:使用正则表达式采集腾讯新闻 正则表达式(Regular Expression)是比较繁琐的,要记的东西比较多,因此我一直都没有腾出时间专门好好研究一下正则表达式,最近网站需要用到...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2016年03月31日 20:14
  • 3312

[python] 常用正则表达式爬取网页信息及分析HTML标签总结

这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法。它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 1.获取标签之间内容 2.获取超链接之间内...
  • Eastmount
  • Eastmount
  • 2016年04月07日 06:13
  • 38155

java通过正则表达式匹配获取链接地址

获取页面中字符串的url地址我们都会使用正则表达式来匹配获取了,下面我来给大家总结几个匹配获取链接地址示例。 1、正则表达式中Matcher中find()方法的应用。 2、String...
  • fancylovejava
  • fancylovejava
  • 2014年01月03日 10:27
  • 19212
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用正则表达式爬取链接和标题
举报原因:
原因补充:

(最多只允许输入30个字)