BeautifulSoup的ResultSet,如何遍历全部内容?

目标网页https://www.w3cschool.cn/code...

这个是抓取html

def getHtml(url):
    re = requests.get(url)
    return re.text
index = getHtml(url)
index

这个是解析html的方法

def parseHtml(html):
    soup = BeautifulSoup(index,'html.parser')
    #soup
    lessonList= soup.find('div',class_='codecamplist-catalog').find_all('a')
    return lessonList
lessonList = parseHtml(index)
lessonList

最后得到的lessonList 是bs4.element.ResultSet 格式

[<a href="//www.w3cschool.cn/codecamp/say-hello-to-html-element.html" title="Say Hello to HTML Element">
 <i class="icon-codecamp-list icon-codecamp-option"></i>
 开始学习HTML标签</a>,
 <a href="//www.w3cschool.cn/codecamp/headline-with-the-h2-element.html" title="Headline with the h2 Element">
 <i class="icon-codecamp-list icon-codecamp-option"></i>
 HTML 学习h2标签</a>,
 <a href="//www.w3cschool.cn/codecamp/inform-with-the-paragraph-element.html" title="Inform with the Paragraph Element">
 <i class="icon-codecamp-list icon-codecamp-option"></i>
 HTML 学习p标签</a>,
 <a href="//www.w3cschool.cn/codecamp/uncomment-html.html" title="Uncomment HTML">
 <i class="icon-codecamp-list icon-codecamp-option"></i>
 删除HTML的注释</a>]

请问一下这样的格式的数据怎么解析呀
目标是把里面的链接和title 保存成csv格式

对应的Tag格式的数据只能找到第一个,使用Find_all方法又会报错。

def getLesson(lessonList):
    for i in lessonList:
        lesson={}
        try:
            lesson['title'] = i.find('a')['href'].lstrip('//')
            lesson['name']= i.find('a')['title']
        except:
            print('error')
    return lesson
getLesson(lessonList)
#  当上面是 lessonList= soup.find_all('div',class_='codecamplist-catalog')
#  .find_all('a') 时为什么只能输出一条呢

结果

{'name': 'Say Hello to HTML Element',
 'title': 'www.w3cschool.cn/codecamp/say-hello-to-html-element.html'}
阅读 17.9k
1 个回答
def parseHtml(html):
    soup = BeautifulSoup(html,'lxml')
    # lessonList = soup.find('div',class_='codecamplist-catalog').find('ul').find_all('a')
    # lessonList = soup.find_all('div',class_='codecamplist-catalog')[0].find_all('ul')[0].find_all('a')
    lessonList= soup.select('div.codecamplist-catalog a')
    for item in lessonList:
        yield {item['href']:item['title']}

三种方式都可以,只是加了注释而已.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏