html - 正則表達(dá)式 python爬蟲
問題描述
import urllib.request
req = urllib.request.urlopen(’http://search.jd.com/Search?k...’)
reqOut[3]: <http.client.HTTPResponse at 0x52bf6d8>
buf = req.read()
buf = buf.decode(’utf-8’)
urllist = re.findall(r’//img.+.png’,buf)這樣正常顯示.png結(jié)尾的圖片網(wǎng)址urllist = re.findall(r’//img.+.jpg’,buf)也基本正常urllist = re.findall(r’//img.+.(png|jpg)’,buf)這樣只能顯示一串圖片的格式,像這樣:’.jpg’, ’.jpg’, ’.png’, ’.jpg’, ’.jpg’, ’.jpg’, ’.jpg’, ’.jpg’, ’.jpg’,這是為什么呢?
問題解答
回答1:主要是因?yàn)? 當(dāng)你沒加()時(shí), re.findall會(huì)將匹配的全部打印出來, 但是如果你加了(), 它就會(huì)打印匹配中, 被()捕獲的結(jié)果, 所以你看到一堆的jpg/png, 正因?yàn)檫@樣, 所以我們需要用()將這個(gè)匹配的鏈接都捕獲起來, 這樣才能打印, 同時(shí)要用(?:jpg|png), 因?yàn)檫@個(gè)地方需要的是匹配jpg或者png, 所以我們需要用非捕獲的分組語法.
# 代碼修改urllist = re.findall(r’(//img.+?.(?:png|jpg))’,buf)
關(guān)于更多關(guān)于捕獲分組/非捕獲分組, 可以參考: 鏈接描述
回答2:[png|jpg]
(png|jpg)的話就做了分組了
import reimport requestsr = requests.get(’http://search.jd.com/Search?keyword=%E6%96%87%E8%83%B8&enc=utf-8&wq=%E6%96%87%E8%83%B8&pvid=4anf50si.fbrh68’)print re.findall(’//img.+.[png|jpg]’, r.text)
相關(guān)文章:
1. javascript - RN項(xiàng)目iOS端真機(jī)測(cè)試賬號(hào)無法登錄!2. 請(qǐng)問各位java自帶類的一些問題3. javascript - mongodb怎么設(shè)置用戶的賬戶不重復(fù)?4. css - transition 的使用?5. mysqld無法關(guān)閉6. redis sentinel怎么跑守護(hù)進(jìn)程以及日志記錄位置的?7. python 字符串匹配問題8. Discuz! Q 有人用過嗎?9. android - 分享到微信,如何快速轉(zhuǎn)換成字節(jié)數(shù)組10. mysql - 數(shù)據(jù)庫:獲取兩個(gè)字段與獲取*,傳輸?shù)臄?shù)據(jù)量差距大嗎?

網(wǎng)公網(wǎng)安備