首页 > 解决方案 > BeautifulSoup 没有找到 xml 标签,我该如何解决这个问题?

问题描述

尝试使用 beautifulsoup 抓取 shopify 网站,使用findAll('url')返回一个空列表。如何检索所需的内容?

import requests
from bs4 import BeautifulSoup as soupify
import lxml

webSite = requests.get('https://launch.toytokyo.com/sitemap_pages_1.xml')
pageSource = webSite.text
webSite.close()

pageSource = soupify(pageSource, "xml")
print(pageSource.findAll('url'))

我试图抓取的页面:https ://launch.toytokyo.com/sitemap_pages_1.xml

我得到的是:一个空列表

我应该得到什么:不是一个空列表

感谢大家的帮助,在我的代码中发现了问题,我使用的是旧版本的 findAll 而不是 find_all

标签: pythonweb-scrapingbeautifulsoup

解决方案


你可以做:

import requests
from bs4 import BeautifulSoup as bs

url = 'https://launch.toytokyo.com/sitemap_pages_1.xml'

soup = bs(requests.get(url).content,'html.parser')


urls = [i.text for i in soup.find_all('loc')]

所以基本上我得到内容并找到包含 url 的 loc 标记,然后我抓取内容;)

更新:需要 url 标签并生成字典

urls = [i for i in soup.find_all('url')]

s = [[{k.name:k.text} for k in urls[i] if not isinstance(k,str)] for i,_ in enumerate(urls)]

使用 from pprint import pprint as print 得到漂亮的 s 打印:

print(s)

注意:您可以使用 lxml 解析器,因为它比 html.parser 更快


推荐阅读