鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Java  Python/ 在爬取網(wǎng)址時(shí),如何用python的正則匹配?

在爬取網(wǎng)址時(shí),如何用python的正則匹配?

如下一段html代碼,有兩段//img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg,現(xiàn)只想獲得前面一個(gè)。
<img class="course-banner lazy" data-original="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" src="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" style="display: inline;">

回答
編輯回答
笑浮塵

一樓的finditer方法是一個(gè)非常好的方法,它會返回一個(gè)迭代器,而不是返回所有的匹配數(shù)據(jù),這樣的好處一個(gè)是節(jié)省內(nèi)存,另一個(gè)是能逐個(gè)輸出,樓主可以參考,謝謝

2017年8月28日 18:31
編輯回答
短嘆

以下代碼:

    import re

    a="""
    <img class="course-banner lazy" data-original="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" src="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" style="display: inline;">
    """


    p = re.compile('data-original="(\S+)"')
    
    iterator = p.finditer(a)
    for match in iterator:
        print match.span()
        print match.group()
        print match.group(1)

將會輸出:

(33, 103)
data-original="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg"
//img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg
2017年1月17日 01:27
編輯回答
遺莣

我覺著正確的方法是使用re.findall, 雖然你的例子是給了一段img, 但是實(shí)際應(yīng)用更多的是查詢一個(gè)html頁面, 里面有若干img需要檢索.

html_string='<img class="course-banner lazy" data-original="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" src="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" style="display: inline;"><img class="course-banner lazy" data-original="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" src="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" style="display: inline;"><img class="course-banner lazy" data-original="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" src="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" style="display: inline;">'

import re
pick=re.findall(r'<img.+?data-original="(.+?)"', html_string)
print pick

這樣得到一個(gè)名為pick的list, 里面是所有匹配到的數(shù)據(jù).

2018年4月1日 07:43
編輯回答
神經(jīng)質(zhì)
<img class="course-banner lazy" data-original="(.*?)" 

正則這么寫就行了。

import re

test = '<img class="course-banner lazy" data-original="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" src="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" style="display: inline;">'

content = re.search('<img class="course-banner lazy" data-original="(.*?)"',test)

print(content.group(1))
//img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg #這是輸出結(jié)果

2018年3月28日 09:09
編輯回答
魚梓
import re
html = """<img class="course-banner lazy" data-original="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" src="http://img4.hhhaaa.com/5a405d45000175cb06000338-240-135.jpg" style="display: inline;">"""
p = re.compile('data-original="(.*?)"')
print(p.search(html).group(1))
2018年5月31日 18:30