无法使用BeautifulSoup抓取嵌套标签

时间:2019-08-12 21:23:51

标签: python web-scraping beautifulsoup

我正在尝试进行网络抓取,目前我仍停留在如何从嵌套在2个div中的'a'标签中获取href链接的问题,而该标签又位于'li'标签中。

例如,为便于描述问题,请考虑以下代码:

static inline const char *stringB(void)
{
    char * buf = malloc(128);
    snprintf(buf, 128, "%s/pathB", stringA());
    return condition() ? "" : buf;
}

在这里,我想获得link.com。此外,每个列表项都存在相同的类名。那我怎么刮这个link.com 请注意,有关真实代码,请参见以下链接: Please click here for the Image of the code

我尝试了各种方法,这些方法是通过其他类似的问题进行搜索的,但没有一个对我有用。

<li class="top">
  <div class="b">
    <div class="c">
       <div class= "d">...</div>
       <div class= "e"> <a href="link.com" class= "f">..</a>
       </div>
     </div>
  </div>
</li>
<li class="top">Same kind of classes as before with different link </li>
<li class="top">Same kind of classes as before with different link</li>

请注意,这段代码包含了我尝试过的各种技术,因此不应将其整体用作参考。我只想知道如何获取此'a'标签的href部分。

提前谢谢! 附言犹豫,因为我对堆栈溢出的第一个问题

2 个答案:

答案 0 :(得分:0)

问题是您在第二个find_all中获得了多个值。因此,您还需要循环这些操作以进行get("href")

soup = BeautifulSoup('<li class="top"><div class="b"><div class="c"><div class= "d">...</div><div class= "e"> <a href="link.com" class= "f">..</a></div></div></div></li>')

job = soup.find_all('li', {'class':'top'})

for j in job:
    for i in j.find_all('a', {'class':'f'}):
        print(i.get('href'))

输出

link.com

答案 1 :(得分:0)

在这里,要访问的元素是在js执行后创建的(仅对登录用户有效),因此,如果您现有的代码(如果选中了soup.body)将无法看到该li标签。

因此,如果页面使用JS来动态加载数据,则必须使用硒。

我为您创建了一个示例。希望这会有所帮助!

import time
from bs4 import BeautifulSoup
from selenium import webdriver

url = "https://www.linkedin.com/search/results/people/?keywords=freelance%20content%20writer&origin=RELATED_SEARCH_FROM_SRP&page=1"

driver = webdriver.Chrome('Path to ChromeDriver') 

driver.get(url)
time.sleep(150) #experiment with timer to fetch all the data
page = driver.page_source
driver.quit()
soup = BeautifulSoup(page, 'html.parser')
#print(soup)
container = soup.find_all('li', attrs={
    'class':'search-result search-result__occluded-item ember-view'})

for c in container:
    for link in c.findAll('a', attrs={'class':'search-result__result-link ember-view'}):
        print(link.get('href')) 

在此处下载ChromDriver表单[https://chromedriver.chromium.org/downloads]
附言检查您的chrome版本以下载驱动程序。