
[英]python - beautifulsoup - find variable amount of text in between tags
[英]python beautifulsoup find between tags
我正在尝试从网站获取数据。 我设法获得了我想要的数据的子集
sections = rows.findAll('p')
for section in sections
print section
这给了我这个:
<p><i>Hello<strong>World</strong></i></p>
<p><strong>Some Text</strong><p>
<p></p>
<p><strong>Monday</strong><p>
<p>section1</p>
<p>section2</p>
<p>section3</p>
<p><strong>Tuesday</strong><p>
<p>section1</p>
<p>section2</p>
<p>section3</p>
<p>section4</p>
<p></p>
我想要的是这个:
Monday
section1
section2
section3
Tuesday
section1
section2
section3
section4
如果 strong 等于我拥有的字典,我可以在强标签之间获得所有 p 标签吗? 或者我应该如何解决?
只需使用正则表达式模块,然后用下面的代码片段替换 for 循环。 它会完成工作
import re
# your code
for section in sections
match=re.match(r'^(?:\s*<[^>]*?>\s*)*?([^<>]+?)(?:\s*<[^>]*?>\s*)*?$',section)
if(match):
print(match.group(1))
如果您想知道正则表达式匹配什么:
^(?:\\s*<[^>] ?>\\s )*?: 将匹配字符串开头的多个标签
([^<>]+?): 将开始和结束标签之间的单词分组
(?:\\s*<[^>] ?>\\s )*?$: 将匹配多个标签直到字符串结束
请检查这个。
from bs4 import BeautifulSoup
import requests
data = requests.post('https://westmanska.se/dagens-lunch/')
soup = BeautifulSoup(data.text, features="html5lib")
status = False
for div_tag in soup.find_all('div', class_="box-default top-border"):
if div_tag.find_next('h5'):
for p_tag in div_tag.find_all('p'):
if not p_tag.find_next('i') or not p_tag.find_next('br'):
print(p_tag.text)
您可以使用 dict 来保存数据并检查要保存的内容。 当前组总是保存在current_group
,简单的逻辑:
needed_sections_dict = {'Monday': [], 'Tuesday': []}
current_group = None
sections = rows.findAll('p')
for section in sections
# check if current p contains strong group heading
# change current_group and continue if it found
group = section.find('strong')
if group and group.text:
if group.text in needed_sections_dict:
current_group = group.text
else:
# not needed group
current_group = None
continue
# current section is not <strong>
# so we check that it contains something and add it to
# current group dict list if current_group is not None (needed)
if current_group and section.text.strip():
needed_sections_dict[current_group].append(section.text)
测试:
>>> needed_sections_dict
{'Monday': ['section1', 'section2', 'section3'],
'Tuesday': ['section1', 'section2', 'section3', 'section4']}
在https://westmanska.se/dagens-lunch/ 中,您需要在<h1>
Vecka 10
之后的所有<p>
并且它是唯一的标签,您可以尝试使用它来过滤数据。
soup.find('h1').find_next_siblings('p'):
import requests
from bs4 import BeautifulSoup
url = 'https://westmanska.se/dagens-lunch/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
for row in soup.find('h1').find_next_siblings('p'):
print(row.text)
结果:
Måndag
Currystekt kycklingfilé med mangosås & grönsaksris (GF/LF)
Rödbetsgravad lax med stuvade gulbetor & potatis serveras med gröna ärtor & citron (GF/LF)
Falafel med tahinisås, grönsaksris & saltgurka (GF)
Capresesoppa med soltorkade tomater, oregano, basilika & mozzarella (LF/Vegan utan ost)
Pasta bolognese med rökt sidfläsk & champinjoner toppas med parmesanost samt ruccola (LF)
Tisdag
Raggmunk med stekt fläsk & rårörda lingon (GF/LF)
Posherad torskrygg med gräslökssås, kokt potatis, pepparrot & bacon (GF/LF)
Kikärtsplättar med rostade nötter, friterad chevré, färsk fikon & saffranshonung
Capresesoppa med soltorkade tomater, oregano, basilika & mozzarella (LF/Vegan utan ost)
Pasta bolognese med rökt sidfläsk & champinjoner toppas med parmesanost samt ruccola (LF)
Onsdag
Pannbiff med grönpepparsås, potatismos & rårörda lingon
Ugnsbakad koljafilé med äggsås, dillslungad potatis & riven morot (GF/LF)
Majsplättar med avokado-chimmichurri & kokt potatis(GF/Vegan)
Capresesoppa med soltorkade tomater, oregano, basilika & mozzarella (LF/Vegan utan ost)
Pasta bolognese med rökt sidfläsk & champinjoner toppas med parmesanost samt ruccola (LF)
Torsdag (Stängt fullbokat)
Fredag
Örtmarinerad flankstek med rödvinsås, potatisgratäng & ångad broccoli (GF/LF)
Panerad flundra med curryremoulad, kokt potatis, gröna ärtor & citron (LF)
Bakad sötpotatis med avokado/fetaoströra toppas med picklad rödlök & lime (GF)
Capresesoppa med soltorkade tomater, oregano, basilika & mozzarella (LF/Vegan utan ost)
Pasta bolognese med rökt sidfläsk & champinjoner toppas med parmesanost samt ruccola (LF)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.