Python:并非每个网页都有某个元素

时间:2017-10-17 05:38:03

标签: python web-scraping beautifulsoup

当我尝试使用网址来抓取网页时,我发现某些元素仅存在于某些页面中而其他元素则不存在。我们以代码为例

代码:

for urls in article_url_set:
    re=requests.get(urls)
    soup=BeautifulSoup(re.text.encode('utf-8'), "html.parser")
    title_tag = soup.select_one('.page_article_title')
    if title_tag=True:
        print(title_tag.text)
    else:
        #do something

如果title_tag退出,我想打印它们,如果不打印,只需跳过它们。

另一件事是,我需要在数据中保存其他元素和title.tag.text。

   data={
        "Title":title_tag.text,
        "Registration":fruit_tag.text,
        "Keywords":list2
    }

它会有错误,因为并非所有文章都有标题,当我尝试保存时,我该怎么做才能跳过它们?的' NoneType'对象没有属性' text'

编辑:我决定不跳过它们并将它们保持为空或无。

2 个答案:

答案 0 :(得分:1)

U代码错误:

for urls in article_url_set:
    re=requests.get(urls)
    soup=BeautifulSoup(re.text.encode('utf-8'), "html.parser")
    title_tag = soup.select_one('.page_article_title')
    if title_tag=True:  # wrong
        print(title_tag.text) 
    else:
        #do something
如果title_tag = True,

你的代码

更改了代码title_tag == True

建议按如下方式创建条件语句。

title_tag == True => True == title_tag

这是一种在犯错时出错的方法。

如果代码为True = title_tag,则会出现错误。

答案 1 :(得分:1)

您可以简单地使用真值测试来检查标记是否存在,否则指定一个类似None的值,然后您可以将其插入数据容器中:

title_tag = soup.select_one('.page_article_title')
if title_tag:
    print(title_tag.text)
    title = title_tag.text
else:
    title = None

或者在一行中:

title = title_tag.text if title_tag else None