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

原创 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()


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


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

相关文章推荐

正则表达式入门知识+用它实现在一个网页中获取所有的链接地址

概念:正则表达式是一种计算机科学的概念、它通常用来检索和替换那些符合规则的文本或者字符串。现在很多的程序设计语言计都支持利用正则表达式来进行字符串的操作,有java、c++、python、javasc...
  • lu93it
  • lu93it
  • 2016年09月14日 08:55
  • 1959

java 使用正则表达式从网页上提取网站标题

     如何从网页上抓取有价值的东西?看懂了下面的程序(非常简单),想从网页上抓取什么信息(标题、内容、Email、价格等)就能抓取什么信息。package catchhtml;import jav...

python提取网页的特定内容(正则表达式实现)

关于正则表达式参考正则表达式 python可以很方便地抓取网页并过滤网页的内容,那么,如何从如下的网页中提取csdn文章的标题“《unix网络编程(卷1)源代码的使用方法》”。 ...

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

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

【整理】详解Python中re.sub

【背景】 Python中的正则表达式方面的功能,很强大。 其中就包括re.sub,实现正则的替换。 功能很强大,所以导致用法稍微有点复杂。 所以当遇到稍微复杂的用法时候,就容易...

python3 多页爬虫爬取百度贴吧帖子所有图片

逛博客,发现了python。说是人工智能开发的主要语言,所以就来了兴趣,打算抽空看看。网上找了教程觉得语法上,相较于.net和java反倒更简单点。基本语法看完,总要弄点东西吧...

Jsoup实现新闻网页的爬取,标题,正文,图片,新闻时间,网页链接的解析示例

以下代码为一个Jsoup爬取新闻网页的简单示例,可直接运行。import java.io.File; import java.io.FileOutputStream; import java.io.I...
  • yxmmao
  • yxmmao
  • 2016年06月04日 23:15
  • 807

python3爬取torrent链接

  • 2016年09月25日 12:24
  • 6KB
  • 下载

python实战(1)--requests+正则表达式_爬取猫眼TOP100

一 思路 二 Requestsrequest官方文档httpdocspython-requestsorgenmaster 用正则表达式来解析这个页面这里面主要用到 compile和findall这两个...
  • lbjyuer
  • lbjyuer
  • 2017年07月25日 20:33
  • 74
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用正则表达式爬取链接和标题
举报原因:
原因补充:

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