[英]Regex to find string in list in Python 3
如何從列表中獲取 base.php?id=5314?
import urllib.parse
import urllib.request
from bs4 import BeautifulSoup
url = 'http://www.fansubs.ru/search.php'
values = {'Content-Type:' : 'application/x-www-form-urlencoded',
'query' : 'Boku dake ga Inai Machi' }
d = {}
data = urllib.parse.urlencode(values)
data = data.encode('ascii')
req = urllib.request.Request(url, data)
with urllib.request.urlopen(req) as response:
the_page = response.read()
soup = BeautifulSoup(the_page, 'html.parser')
for link in soup.findAll('a'):
d[link] = (link.get('href'))
x = (list(d.values()))
您可以將內置函數filter
與regex
結合使用。 例子:
import re
# ... your code here ...
x = (list(d.values()))
test = re.compile("base\.php\?id=", re.IGNORECASE)
results = filter(test.search, x)
根據評論更新:您可以將過濾結果轉換為列表:
print(list(results))
具有以下硬編碼列表的示例結果:
x = ["asd/asd/asd.py", "asd/asd/base.php?id=5314",
"something/else/here/base.php?id=666"]
你得到:
['asd/asd/base.php?id=5314', 'something/else/here/base.php?id=666']
這個答案基於這個討論過濾列表的頁面。 它有更多的實現來做同樣的事情,這可能更適合你。 希望能幫助到你
您可以將正則表達式直接傳遞給find_all
,它會根據帶有href=re.compile(...
的 href 為您進行過濾:
import re
with urllib.request.urlopen(req) as response:
the_page = response.read()
soup = BeautifulSoup(the_page, 'html.parser')
d = {link:link["href"] for link in soup.find_all('a', href=re.compile(re.escape('base.php?id='))}
find_all 將只返回具有與正則表達式匹配的 href 屬性的 a 標簽。
這給了你:
In [21]:d = {link:link["href"] for link in soup.findAll('a', href=re.compile(re.escape('base.php?id='))}
In [22]: d
Out[22]: {<a href="base.php?id=5314">Boku dake ga Inai Machi <small>(ТВ)</small></a>: 'base.php?id=5314'}
考慮到您似乎只是在尋找一個鏈接,那么使用 find 會更有意義:
In [36]: link = soup.find('a', href=re.compile(re.escape('base.php?id='))
In [37]: link
Out[37]: <a href="base.php?id=5314">Boku dake ga Inai Machi <small>(ТВ)</small></a>
In [38]: link["href"]
Out[38]: 'base.php?id=5314'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.