1 python regex beautifulsoup web-scraping
我正在尝试抓取一个食谱网站,但在尝试将标签后的字符串分成不同的句子时遇到麻烦<br>。
为了更好地理解这个问题,我将向您展示我正在讨论的代码和输出。
\n\n以下是我正在处理的 HTML 片段。
\n\n<div class="opskriften">\r\n <p class="h3">Ingrediensliste</p>\r\n <p></p>\r\n<p>100 g. m\xc3\xa6lkechokolade<br>20 g. mini marshmallows<br>40 g. saltede peanuts</p>\r\n<p>\r\n\r\n </p></div>Run Code Online (Sandbox Code Playgroud)\r\n我想以某种方式分离标签后的每种成分<br>,这样我就可以进一步分离字符串,这样我最终可以获得一个包含 3 个不同列(数量、单位、成分)的表格。以下代码是我用来获取特定<p>标签的代码。
from bs4 import BeautifulSoup\n import requests \n r = requests.get("site")\n soup = BeautifulSoup(r.content)\n ingredients = soup.find(\'div\', class_=\'opskriften\')\n ingredientslist = ingredients.select_one("p:nth-oftype(2)")\n print(ingredientslist)\nRun Code Online (Sandbox Code Playgroud)\n\n输出如下:
\n\n<p>100 g. m\xc3\xa6lkechokolade<br/>20 g. mini marshmallows<br/>40 g. saltede peanuts</p>\nRun Code Online (Sandbox Code Playgroud)\n\n如何分离这些成分,以便能够应用正则表达式来匹配所有内容并将其放入如上所述的正确列中?
\n\n我尝试使用正则表达式,如下所示,但我得到了,AttributeError: \'NoneType\' object has no attribute \'groups\'所以我想我需要将它们分开才能正确应用。
pattern_text=r\'(?P<amount>\\d+):\\s+(?P<unit>\\w+):\\s+(?P<ingredient>\\w+)\'\npattern=re.compile(pattern_text)\n\nmatch=pattern.match(ingredientslist)\nmatch.groups()\nRun Code Online (Sandbox Code Playgroud)\n\n欢迎任何建议!
\n您可以.get_text()与separator参数一起使用:
from bs4 import BeautifulSoup\n\nhtml = \'\'\'<div class="opskriften">\n <p class="h3">Ingrediensliste</p>\n <p></p>\n<p>100 g. m\xc3\xa6lkechokolade<br>20 g. mini marshmallows<br>40 g. saltede peanuts</p>\n<p>\n\n </p></div>\'\'\'\n\n\nsoup = BeautifulSoup(html, \'html.parser\')\n\ningredients = soup.find(\'div\', class_=\'opskriften\')\n\nprint (ingredients.get_text(separator=" ").strip())\nRun Code Online (Sandbox Code Playgroud)\n\n输出:
\n\nIngrediensliste \n\n 100 g. m\xc3\xa6lkechokolade 20 g. mini marshmallows 40 g. saltede peanuts\nRun Code Online (Sandbox Code Playgroud)\n