我想更改soup.find.all
的输出。在原始资料中我们有:
<a href="/book/nfo/?id=4756888" class="ajax nfo"></a>
我的soup.find_all
:
href = [b.get('href') for b in soup.find_all('a', href=re.compile(r'.*\?id\=\d{4,8}'))]
给了我这个:
/book/nfo/?id=4756888
但我想要这个:
http://127.0.0.1/book/download/?id=4756888
答案 0 :(得分:1)
您可以使用Python string的属性向其添加和替换部件:
a='/book/nfo/?id=4756888'
b = 'http://127.0.0.1' + a.replace('nfo', 'download')
print(b)
给出:
'http://127.0.0.1/book/download/?id=4756888'
此处无需使用regex
。
答案 1 :(得分:0)
你可以在前面添加http://127.0.0.1
并使用python的re.sub()函数将'nfo'替换为'download'。
re.sub(r'pattern_to_match',r'replacement_string', string)
您可以按如下方式实施:
from bs4 import BeautifulSoup
import re
soup = BeautifulSoup("""<a href="/book/nfo/?id=4756888" class="ajax nfo"></a>""")
c = ['http://127.0.0.1'+b.get('href') for b in soup.find_all('a', href=re.compile(r'.*\?id\=\d{4,8}'))]
print([re.sub(r'nfo',r'download',q) for q in c ])
输出:
['http://127.0.0.1/book/download/?id=4756888']
答案 2 :(得分:0)
您可以编译正则表达式并将其应用于列表推导中,如下所示:
from bs4 import BeautifulSoup
import re
soup = BeautifulSoup('<a href="/book/nfo/?id=4756888" class="ajax nfo"></a>', 'html.parser')
re_s = re.compile(r'(.*?\/)nfo(\/.*?)').sub
hrefs = [re_s('http://127.0.0.1' + r'\1download\2', a.get('href')) for a in soup.find_all('a', href=re.compile(r'.*\?id\=\d{4,8}'))]
print(hrefs)
给你:
['http://127.0.0.1/book/download/?id=4756888']