1.正則表達式基礎介紹
Python 的 re 模塊(Regular Expression 正則表達式)提供各種正則表達式的匹配操作,和 Perl 腳本的正則表達式功能類似,使用這一內嵌於 Python 的語言工具,儘管不能滿足所有複雜的匹配情況,但足夠在絕大多數情況下能夠有效地實現對複雜字符串的分析並提取出相關信息。Python 會將正則表達式轉化爲字節碼,利用 C 語言的匹配引擎進行深度優先的匹配。
文中相關知識詳解可以參考下面鏈接:https://www.cnblogs.com/yyyg/p/5498803.html
下面我先講解入門級的正則表達式,如果需要了解更多,相關鏈接如上。
re.findall(pattern, string[, flags]):
import re
result=re.findall('a..',text)#.爲一個字符,輸出可以爲abc aac 等等
result=set(result)
print(result)
result=re.findall(' a.. ',text)#如上,輸出3個,但是前後都有空格
result=set(result)
print(result)
result=re.findall(' a[a-z][a-z] ',text)#[ ]控制範圍如代碼所示[a-z]爲從a到z的字母 ,可以爲b c等等
result=set(result)
print(result)
result=re.findall(' (a[a-z][a-z]) ',text) # ()括起來後,則只輸出()裏面的東西
result=set(result)
print(result)
result=re.findall(' *([Aa][a-z][a-z]) ',text)# *則是和.一樣,但是他可以爲空,即爲不輸出
result=set(result)
print(result)
result=re.findall(' a[a-z][a-z] |A[a-z][a-z] ',text)# | 這裏即爲或者
result=set(result)
print(result)
上面代碼中的text是我隨便找的一個文檔,大家也可以自行輸入
re.match和re.search:
import re
ret_match = re.match("c", "abcde"); # 從字符串開頭匹配,匹配到返回match的對象,匹配不到返回None
if (ret_match):
print("ret_match:" + ret_match.group());
else:
print("ret_match:None");
ret_search = re.search("c", "abcde"); # 掃描整個字符串返回第一個匹配到的元素並結束,匹配不到返回None
if (ret_search):
print("ret_search:" + ret_search.group());
基礎正則表達式,先介紹到這裏,後面會繼續講解,下面開始我們的第一個實際項目,第一個爬蟲:
豆瓣電影top250
要求:影片名稱,排名,國家,導演等:
1.建議首先將源碼爬取下來保存爲文件,這樣方便自己多次爬取,並且速度快。
with open('E:\\豆瓣top250_html.txt', 'w+',encoding="utf-8") as f:
f.write(html)
2.分析網頁鏈接:可以看出豆瓣top250是有250個電影,他有10個頁面所以我們採用如下方式:
for i in pages:
i=i*25
i=str(i)
url='https://movie.douban.com/top250?start='+i+'&filter='
url_list.append(url)
將我們所需要的網址保存下來,後面再次使用;
3.分析網頁源碼
很容易看出,我們所需要的數據,他們的頭標籤如上,於是,我們可以寫出如下:
for i in soup.find_all('span', class_="title"): # 名字
print(i.text)
name_list.append(i.text)
for i in soup.find_all('p', class_=""): # 看過的總人數
print(i.text)
country_list.append(i.text)
於是,我們即可獲取出我們所需要的數據,當然,我們可以將其保存在相關文件中,文件操作,和數據整理,這裏就不進行講解了。