[英]Web scraping with Python and Beautiful Soup
我正在练习构建网络刮刀。 我现在正在进行的工作包括访问一个站点,为该站点上的各个城市抓取链接,然后获取每个城市的所有链接,并在所述城市中抓取所有属性的链接。
我正在使用以下代码:
import requests
from bs4 import BeautifulSoup
main_url = "http://www.chapter-living.com/"
# Getting individual cities url
re = requests.get(main_url)
soup = BeautifulSoup(re.text, "html.parser")
city_tags = soup.find_all('a', class_="nav-title") # Bottom page not loaded dynamycally
cities_links = [main_url + tag["href"] for tag in city_tags.find_all("a")] # Links to cities
如果我打印出city_tags
我会得到我想要的HTML。 但是,当我打印cities_links
我得到了AttributeError: 'ResultSet' object has no attribute 'find_all'
。
我在这里从其他q收集这个错误是因为city_tags
没有返回,但是如果打印出所需的html,则不会出现这种情况? 我注意到所说的html在[] - 这有什么不同吗?
那么city_tags是一个标签的bs4.element.ResultSet
(基本上是一个列表),你在它上面调用了find_all。 您可能希望在结果集的每个元素中调用find_all,或者在此特定情况下只需检索其href属性
import requests
from bs4 import BeautifulSoup
main_url = "http://www.chapter-living.com/"
# Getting individual cities url
re = requests.get(main_url)
soup = BeautifulSoup(re.text, "html.parser")
city_tags = soup.find_all('a', class_="nav-title") # Bottom page not loaded dynamycally
cities_links = [main_url + tag["href"] for tag in city_tags] # Links to cities
正如错误所说, city_tags是一个ResultSet,它是一个节点列表,它没有find_all
方法,你要么必须遍历集合并在每个单独的节点上应用find_all
,或者在你的情况下,我认为你可以只需从每个节点中提取href
属性:
[tag['href'] for tag in city_tags]
#['https://www.chapter-living.com/blog/',
# 'https://www.chapter-living.com/testimonials/',
# 'https://www.chapter-living.com/events/']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.