我必须提取网站上找到的品牌名称,型号和有时修剪水平的汽车。问题是,当我在我的正则表达式中放置两个组时,我无法访问第三个元素(汽车的修剪级别),当我在我的正则表达式中放置三个组时,我没有得到任何没有修剪级别的汽车。
<a href="https://XXX.ir/car/bmw/x4">بیامو ایکس ۴ </a>
<a href="https://XXX.ir/car/peugeot/405/glx">پژو ۴۰۵ جیالایکس</a>
my_regex_1 = r'https:\/\/XXX\.ir\/car\/(.+)\/(.+)\/(.+)'
my_regex_2 = r'https:\/\/XXX\.ir\/car\/(.+)\/(.+)\/'
我的代码:
import requests
from bs4 import BeautifulSoup
import re
mainpage = requests.get('https://bama.ir/')
soup = BeautifulSoup(mainpage.text, 'html.parser')
brands = soup.find_all('a')
infos = []
for item in brands:
link = item['href']
info = re.findall(r'https:\/\/bama\.ir\/car\/([^\/]+?)\/([^\/]+?)(?:\/([^"]+))?', link)
infos.append(info)
print(infos)
这里的一个选择是使用库urlparse
,并避免完全使用正则表达式:
input = "<a href=\"https://XXX.ir/car/bmw/x4/lx\">بیامو ایکس ۴ الایکس</a>"
url = re.sub(r'.*(https?://[^"]+).*', '\\1', input)
path = urlparse.urlparse(url).path
parts = path[1:].split('/')
print(parts)
['car', 'bmw', 'x4', 'lx']
使用手头的路径组件列表,您可以根据需要简单地迭代它。
试试Regex:https:\/\/XXX\.ir\/car\/([^\/]+?)\/([^\/]+?)(?:\/([^\"]+))?\"