在抓取网站时找不到与'inspect element'存在的div

时间:2018-01-18 03:57:47

标签: python web-scraping beautifulsoup

我有一个下载html页面的python脚本。我正在寻找这个div:

<data-a-target="clip-thumbnail-link"  

当我在网页上检查元素时,我看到了那个div。但它没有出现在我的脚本中的print语句中

from bs4 import BeautifulSoup
from urllib import urlopen

BASE_URL = "https://www.twitch.tv/lethalfrag/clips"

def get_category_links(section_url):
    html = urlopen(section_url).read()    
    soup = BeautifulSoup(html, "lxml")    
    print(soup)     

get_category_links(BASE_URL)

1 个答案:

答案 0 :(得分:0)

如果您在页面源中搜索被检查元素,则可以看到它已丢失。这告诉我们JavaScript在加载后正在修改页面。 scpurllib无法运行JavaScript代码。因此,您必须使用requests

有关安装和演示,请阅读此https://pypi.python.org/pypi/selenium

您需要使用explicit wait才能获取您要查找的元素。

Selenium

输出:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

driver = webdriver.Chrome()
driver.get('https://www.twitch.tv/lethalfrag/clips')
try:
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'clips-cards ')))
except TimeoutException:
    print('Page timed out after 10 secs.')
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.quit()
print(soup.find('a', {'data-a-target': 'clip-thumbnail-link'})['href'])