python,beautifulsoup)如果Statement不起作用

时间:2018-04-08 21:33:58

标签: python parsing beautifulsoup

我想用这个来源解析一个URL和文本:

<div class="news_list">
                <a href="/media/view.asp?idx=68230&amp;page=2&amp;kind=2">

                <img src="/media/upFiles2/2018/04/4-82(250).jpg" height="70" alt="" class="news_img">

                <span class="news_txt">영등포구, 7월까지 어린이보호구역 CCTV 환경 개선한다</span>
                </a><br>
                <a href="/media/view.asp?idx=68230&amp;page=2&amp;kind=2">영등포구가 사업비 1억5,000만여원을 투입해 오는 7월까지 어린이보호구역 내 설치된 방범용 CCTV 주변 환경을 개선한다. 구는 환경개선사업을 통해 학교폭력, 유괴 등 각종 범죄와 교통사고로부터 어린이들을 안전하게...</a> <span class="news_writer">박미영 기자 | 2018.04.07 11:38</span>
                </div>

标签'a'上没有特定功能,所以我使用父类名称 这是我的代码

from urllib.request import urlopen
from bs4 import BeautifulSoup

page = urlopen("http://www.boannews.com/media/t_list.asp?Page=1&kind=" )
soup = BeautifulSoup(page,"lxml")

for a in soup.find_all("a") :
    print(a.parent.get('class'))
    if a.parent.get('class') == "news_list" :
        print(a.text)
        print(a.get('href'))

当我使用print(a.parent.get('class'))时,我可以获得'news_list'

但是如果声明没有打印文本或href。

我认为似乎没有语法错误,没有错误。我不知道哪个部分是错的。

这是我的代码的结果

result screen

2 个答案:

答案 0 :(得分:4)

a.parent.get('class')正在返回一个列表(因为标签可以包含多个类),并列出不等于字符串

翻转if语句以检查列表是否包含类

if "news_list" in a.parent.get('class', []):

答案 1 :(得分:0)

由于您的代码中的错误已经解决here,我建议您改为使用CSS selectors

for a in soup.select('.news_list > a'):
    print(a.text)
    print(a['href'])

请注意使用select方法而不是find_all

它比以前更清洁:

for a in soup.find_all('a'):
    if 'news_list' in a.parent.get('class', []):
        ...