Python Selenium-如何在跨度后在div中获取文本

时间:2018-06-23 23:25:16

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

我在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)

该代码适用于某些动漫,不适用于其他动漫。有时某些动漫的立场有所不同,我没有获得有关流派的信息,而是获得有关制作动漫的工作室的信息,等等。

我想要的是在span类中指定“流派:”,并获得其下方列出的流派,如上图所示。我似乎找不到与我要找的东西相似的东西(尽管我可能只是不对我的问题措辞不当以及缺乏使用xpath的经验)

1 个答案:

答案 0 :(得分: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