之前在學習爬蟲的時候遇到了匹配內容時發現存在換行,這時沒法匹配了,後來在網上找到了一種方法,當時懶得記錄,今天突然有遇到了這種情況,想想還是在這裏記錄一下吧。
當時爬取的時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("首頁所有博客爬取結束")
此時則爬取成功