之前在學習爬蟲的時候遇到了匹配內容時發現存在換行,這時沒法匹配了,后來在網上找到了一種方法,當時懶得記錄,今天突然有遇到了這種情況,想想還是在這里記錄一下吧。
當時爬取的時csdn首頁博客,如下圖
看了源代碼,發現如果使用<a href="....來爬取的話,這樣得到的會有許多其他的網址,並不全是我需要得博文,但是用<div class="title">去匹配后面的又出現了換行,但是換行匹配我又不會。。。。
re.compile()函數的一個標志參數叫re.DOTALL,它可以讓正則表達式中的點(.)匹配包括換行符在內的任意字符。
pat = ' <div class="title">.*?<h2>.*?<a href="(.*?)" target="_blank"' # 此時的.就可以匹配包括換行在內的任意字符 rst1 = re.compile(pat, re.DOTALL).findall(data)
import urllib.request import re
url = "http://www.csdn.net/" data = urllib.request.urlopen(url).read().decode("utf-8") print(len(data)) pat = ' <div class="title">.*?<h2>.*?<a href="(.*?)" target="_blank"' rst1 = re.compile(pat, re.DOTALL).findall(data) print(len(rst1)) for i in range(0, len(rst1)): print(rst1[i]) data = urllib.request.urlopen(rst1[i]).read().decode("utf-8", "ignore") urllib.request.urlretrieve(rst1[i], "D:\\python\\studyPython\\爬蟲學習\\學習urllib\\blog\\"+str(i+1)+".html") print("爬取第:", i+1, "篇博客成功") print("首頁所有博客爬取結束")
此時則爬取成功