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)你沒加()時, re.findall會將匹配的全部打印出來, 但是如果你加了(), 它就會打印匹配中, 被()捕獲的結(jié)果, 所以你看到一堆的jpg/png, 正因?yàn)檫@樣, 所以我們需要用()將這個匹配的鏈接都捕獲起來, 這樣才能打印, 同時要用(?:jpg|png), 因?yàn)檫@個地方需要的是匹配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. angular.js - webpack build后的angularjs路由跳轉(zhuǎn)問題2. java - web項目中,用戶登陸信息存儲在session中好 還是cookie中好,取決于什么?3. 數(shù)組按鍵值封裝!4. mysql - 根據(jù)一個字段查找另一個字段重復(fù)的數(shù)據(jù)?并刪除相同的記錄,保留其中一個。5. mysql - 查詢字段做了索引為什么不起效,還有查詢一個月的時候數(shù)據(jù)都是全部出來的,如果分拆3次的話就沒問題,為什么呢。6. 這個是什么問題?7. mysql - navicat 經(jīng)常打開表一直在載入中 也不能關(guān)閉 著急解決8. 單擊登錄按鈕無反應(yīng)9. mysql 新增用戶 主機(jī)名設(shè)定 失敗10. mysql儲存json錯誤
