最近爬虫爬取了一些标签里的href文本,里面什么都有,也有我要的跳转链接。但是正则匹配没学好,只能百度,百度的结果又不是很令人满意。
废话不多说,百度结果如下:
import re
pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+') # 匹配模式
string = "href='javascript:sendProblemForm('1966', 'Adventures Among Books','http://ebooks.lib.ntu.edu.tw/Home/book_fetcher.jsp?ID=1966&State=1')"
url = re.findall(pattern,string)
print url
这样的正则匹配确实可以用,但给我返回的结果不是最好的,返回结果如下:
["http://ebooks.lib.ntu.edu.tw/Home/book_fetcher.jsp?ID=1966&State=1')"]
这就老是多个尾巴!’ ) 就很烦。然后又要去做切片操作之类的,很不简洁。所以我重新去学了正则表达式。
解决方案:
学习之后,我的代码是如下:
comp = re.compile('(http://.*?te=\d+)')
result = comp.findall(string)[0]
返回结果:
"http://ebooks.lib.ntu.edu.tw/Home/book_fetcher.jsp?ID=1966&State=1"
我来跟大家解析一下,http://是开头, .*? 是匹配所有的字符,te=\d+是匹配所有te字母=数字结尾的。这样我就得到了我想要的url链接,省去了不少代码量。
备注:仅供参考,仅为笔记,如果更优代码,请多多指教。