Python和BeautifulSoup:为什么我的if条件有效

时间:2017-11-20 15:45:21

标签: python string beautifulsoup

我试图使用beautifulSoup废弃网页,然后构建一个从表中获取一些信息的代码。 这是我正在处理的代码,但我对if条件有疑问:

p=soup_tab.find_all('tr')
j=0
for i in p:
 soup_tr = BeautifulSoup(str(i) ,'html.parser')
 if(soup_tr.find('span', 
{"id":"ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl"+str(j)+
 "_reference"})):
       print("enter if 1 =======================")
       cons_intitule_ref= (soup_tr.find('span',
 {"id":"ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl"+str(j)+
 "_reference"})).get_text()
       resultat.append(cons_intitule_ref)

我的代码中的问题是在if条件下,而执行程序时没有打印("输入如果1 ========")。 并且我确定我正在搜索的标签是正确的,我认为确切的问题是条件(如果);

任何帮助,请我坚持这个问题几个小时,但仍然 谢谢你提前

1 个答案:

答案 0 :(得分:0)

主要问题我看到:您正在j=0开始循环0,它应该从1开始按顺序打印您想要的结果。

如果这是您的html(实际页面的精简版),并且您尝试获取与此标记相关联的文字:

html = '''<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl1_reference">01/AMI/RDOE/2017</span>
<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl2_reference">01/ct/2017</span>
<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl3_reference">108/2017/CNSS</span>
<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl4_reference">1/2017</span>
<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl5_reference">09/2017/CZC</span>
<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl6_reference">65/2017/TGR</span>
<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl7_reference">20/2017/DMSPK</span>
<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl8_reference">05/INDH/2017</span>
<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl9_reference">13/CS/2017</span>
<span class="ref" id="ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl10_reference">158/2017/RRA</span>'''

你应该像这样使用正则表达式:

import re
soup = BeautifulSoup(html, 'lxml')
for item in soup.findAll('span', {"id": re.compile(
    "ctl0_CONTENU_PAGE_resultSearch_tableauResultSearch_ctl\d+_reference")}):
    item.get_text()

返回:

'01/AMI/RDOE/2017'
'01/ct/2017'
'108/2017/CNSS'
'1/2017'
'09/2017/CZC'
'65/2017/TGR'
'20/2017/DMSPK'
'05/INDH/2017'
'13/CS/2017'
'158/2017/RRA'