使用Beautiful soup

时间:2016-09-05 21:30:48

标签: python html beautifulsoup html-parsing html-lists

我试图在最终结果下刮掉ul表中的li公司。源代码看起来像这样

import string
import re
import urllib2
import datetime
import bs4
from bs4 import BeautifulSoup

class AJSpider(object):

    def __init__(self):
        print ("initisizing")
        self.date = str(datetime.date.today())
        self.cur_url = "https://youinvest.moneyam.com/modules/forward-diary/?date={date}&period=month"
        self.datas = []
        print ("initisization done")


    def get_page(self,cur_date):
        url = self.cur_url
        try:
            my_page = urllib2.urlopen(url.format(date = cur_date)).read().decode("utf-8")
            my_soup = BeautifulSoup(my_page, "html.parser")

        except:
            print ('Failed')
        return my_soup

    def get_final(self, soup_page):
        temp_data = []
        final_result_section = soup_page.find("h3", text="Final Result")
        print final_result_section

    def start_spider(self):
        my_page = self.get_page(self.date)
        self.get_final(my_page)

def main():

    my_spider = AJSpider()
    my_spider.start_spider()

if __name__ == '__main__':
    main()

我在stackoverflow中发现了类似的问题 Beautiful Soup: Accessing <li> elements from <ul> with no id,但这里有一个类ID,这使事情变得容易多了。

在我的场景中,我如何从ul表中提取li元素?这里唯一的标识符实际上是h3标签的内容,即最终结果,但它不是id,所以我不知道如何使用它。

1 个答案:

答案 0 :(得分:3)

按文字查找h3元素并获取following ul list

ul = soup.find("h3", text="Final Result").find_next_sibling("ul")
for li in ul.find_all("li"):
    print(li.span.get_text(), li.a.get_text())

请注意,在最新版本的BeautifulSoup中,text参数已重命名为string,但由于向后兼容性,它们都有效。