[問題] 爬蟲re.findall() 問題

作者: mark31731123 (mark31731123)   2019-10-27 15:42:35
各位好,小弟看了python的爬蟲基礎
要把網頁的這段爬下來<title>Scraping tutorial 1 | 莫烦Python</title>
看了教學是用以下這段
res=re.findall(r"<title>(.+?)</title>",html)
print(res[0])
想問的是用r"" 這個用法裡面為什麼不是用r"<title>[.+?]</title>"
而是用(.+?) ,搞不太懂()的意義,也搞不太懂有沒有加?的差別
懇請各位大大解釋
作者: penut85420 (PenutGGorz)   2019-10-27 15:49:00
()跟[]的用法是不一樣的,例如[ABC]代表只要是ABC其中一個字就算有符合,()則是表示群組的意思。有加問號代表找最短的字串
作者: mark31731123 (mark31731123)   2019-10-27 15:55:00
群組的話不是應該用.group()的形式去print出來嗎?可是用這種方式卻會跳error code
作者: penut85420 (PenutGGorz)   2019-10-27 16:08:00
.group 跟 findall 其實還蠻類似的,有error可能是別的問題
作者: mark31731123 (mark31731123)   2019-10-27 16:13:00
而且為什麼是用res[0]的方式阿,代表網頁是list?
作者: penut85420 (PenutGGorz)   2019-10-27 16:17:00
因為findall會將所有符合的情況以list回傳,例如html="<title>A</title><title>B</title><title>C</title>", 那re.findall就會回傳["A", "B", "C"]
作者: mark31731123 (mark31731123)   2019-10-27 16:27:00
感謝解答,原來會以list回傳

Links booklink

Contact Us: admin [ a t ] ucptt.com