python beautifulsoup在标记之间查找
我试图从一个网站上获取数据。我设法得到了我想要的数据的一个子集python beautifulsoup在标记之间查找,python,beautifulsoup,scrape,Python,Beautifulsoup,Scrape,我试图从一个网站上获取数据。我设法得到了我想要的数据的一个子集 sections = rows.findAll('p') for section in sections print section 这就给了我: <p><i>Hello<strong>World</strong></i></p> <p><strong>Some Text</strong><p> <
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>
如果strong等于我的dict,我能得到强标记之间的所有p标记吗?或者我应该如何解决它?只需使用regex模块,然后用下面的代码片段替换for循环。它会成功的
import re
# your code
for section in sections
match=re.match(r'^(?:\s*<[^>]*?>\s*)*?([^<>]+?)(?:\s*<[^>]*?>\s*)*?$',section)
if(match):
print(match.group(1))
重新导入
#你的代码
一节接一节
match=re.match(r'^(?:\s*]*?>\s*)*?([^]+?)(?:\s*]*?>\s*)*?$,节)
如果(匹配):
打印(匹配组(1))
如果您想知道正则表达式与什么匹配:
^(?:\s*]?>\s)*?:
将从字符串的开头匹配多个标记
([^]+?):
将单词分组在起始标记和结束标记之间
(?:\s*]?>\s)*?$:
将匹配多个标记,直到字符串结束只需使用regex模块,然后用下面的代码段替换for循环。它会成功的
import re
# your code
for section in sections
match=re.match(r'^(?:\s*<[^>]*?>\s*)*?([^<>]+?)(?:\s*<[^>]*?>\s*)*?$',section)
if(match):
print(match.group(1))
重新导入
#你的代码
一节接一节
match=re.match(r'^(?:\s*]*?>\s*)*?([^]+?)(?:\s*]*?>\s*)*?$,节)
如果(匹配):
打印(匹配组(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)
请看看这个
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保存数据并检查要保存的内容。当前组始终保存在当前组中,简单逻辑:
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)
您可以使用dict保存数据并检查要保存的内容。当前组始终保存在当前组中,简单逻辑:
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)
在
中的Vecka 10
之后,您似乎需要所有
,它是唯一的标记,您可以尝试使用它来过滤数据
soup.find('h1').find_next_siblings('p'):
结果:
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)
在
中的Vecka 10
之后,您似乎需要所有
,它是唯一的标记,您可以尝试使用它来过滤数据
soup.find('h1').find_next_siblings('p'):
结果:
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)
什么是原始HTML?在HTML中的什么地方有这些
?也许它们是在一些独特的标签中,你可以用它来过滤结果-例如find(“一些标签”,“属性”)。find_all(“p”)
Maybe slice resultsrows.findAll('p')[3:-1]
原始html是一团乱麻,但是所有的p标签都位于divcode
rows=soup.find('div',attrs={'class':'box default top border'))你不能显示这个页面的url吗?当然。这是页面。它是用瑞典语写的,在我的例子中,我试图简化它,什么是原始的HTML?在HTML中的什么地方有这些
?也许它们是在一些独特的标签中,你可以用它来过滤结果-例如find(“一些标签”,“属性”)。find_all(“p”)
Maybe slice resultsrows.findAll('p')[3:-1]
原始html是一团乱麻,但是所有的p标签都位于divcode
rows=soup.find('div',attrs={'class':'box default top border'))你不能显示这个页面的url吗?当然。这是页面。在我的例子中,我试图简化它,问题是它可以是p标签中的任何东西。我只是以第1节、第2节等为例,这并不是我最好的选择guess@Ruud您应该显示您拥有的真正的HTML,然后我们可以尝试为这个真正的HTML创建代码。现在,我们只能处理您正在讨论的HTML,因为我们不知道您的HTML有多复杂。顺便说一句:在下面的评论中,问题OP将url添加到原始HTML中:问题是它可以是p标记中的任何内容。我只是以第1节、第2节等为例,这并不是我最好的选择guess@Ruud您应该显示您拥有的真正的HTML,然后我们可以尝试为这个真正的HTML创建代码。现在,我们只能处理您正在讨论的HTML,因为我们不知道您的HTML有多复杂。顺便说一句:在下面的评论中,问题OP将url添加到原始HTML中:您的代码提供了HelloWorld
和一些文本,但OP不想要它。更改为soup中p_标记的循环。find_all('p')[2:]:@furasy您可以将其添加到答案中。但在其他评论中,您可以看到OP有更复杂的HTML(但OP没有显示)而且它可能需要更复杂的解决方案:)顺便说一句:在下面的评论中,问题OP在原始HTML中添加了url:@furas我已经根据网站用例更新了代码。您的代码给出了HelloWorld
和一些文本,但OP不想要它。更改为soup中p_标记的循环。find_all('p')[2::@furasy您可以在答案中添加它。但在其他评论中,您可以看到OP有更复杂的HTML(但OP没有显示)它可能需要更复杂的解决方案:)顺便说一句:在下面的评论中,问题OP将url添加到原始HTML:@furas我已经根据网站用例更新了代码。顺便说一句:在下面的评论中,问题OP将url添加到原始HTML中:顺便说一句:在下面的评论中,问题OP将url添加到原始HTML中: