【问题标题】:Python Selenium - how to get text in div after spanPython Selenium - 如何在跨度后获取div中的文本
【发布时间】:2018-06-23 23:25:16
【问题描述】:

我有一个指向 myanimelist.net 上不同动漫的 url 列表。对于每个动漫,我想获取可以在网站上找到的每个动漫的流派文本,并将其添加到字符串列表中(每个动漫一个元素,如果动漫列出了 5 个流派,则不是 5 个单独的元素)

这是 myanimelist.net 上动画的HTML code。我想基本上获取图像顶部的流派文本并放入列表中,因此在显示的图像中,它在列表中的条目将是 ["Mystery, Police, Psychological, Supernatural, Thriller, Shounen"] 并且对于我列表中的每个 url,另一个包含该动画流派的字符串被附加到列表中。

这是我的代码的主要部分

driver = webdriver.Firefox()
flist = [url1, url2, url3]   #List of urls
genres = []
for item in flist:
    driver.get(item)   #Opens each url
    elem = driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[3]/div[2]/table/tbody/tr/td[1]/div/div[16]").text
    genres.append(elem)

该代码适用于某些动漫,但不适用于其他动漫。有时,某些动漫的位置会有所不同,而不是获取有关流派的信息,而是获取有关制作动漫的工作室的信息等。

我想要的是在跨度类中指定“流派:”并获取其下方列出的流派,如上图所示。我似乎找不到任何与我正在寻找的东西相似的东西(尽管我可能只是没有正确表达我的问题以及缺乏使用 xpaths 的经验)

【问题讨论】:

    标签: python-3.x selenium web-scraping


    【解决方案1】:
    driver.get('https://myanimelist.net/anime/35760/Shingeki_no_Kyojin_Season_3')
    links = driver.find_elements_by_xpath("//div[contains(string(), 'Genres')]/a[contains(@href,'genre')]")
    for link in links:
        title= elem.get_attribute("title")
        genres.append(title)
    print(genres)
    genresString = ",".join(genres)
    print(genresString)
    

    样本输出:

    ['Action', 'Military', 'Mystery', 'Super Power', 'Drama', 'Fantasy', 'Shounen']
    
    Action,Military,Mystery,Super Power,Drama,Fantasy,Shounen
    

    【讨论】:

    • 这很好用,但是有没有办法将该字符串列表转换为单个字符串列表条目?我有一个要传递给 driver.get() 语句的 url 列表,所以我想要每个 url 的流派的单个字符串条目,以便两个列表的元素是相同的数字,而不是 ['Action', 'Military', 'Mystery', 'Super Power', 'Drama', 'Fantasy', 'Shounen'] 它变成 @987654324 @
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2017-11-09
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    相关资源
    最近更新 更多