我刚刚开始使用BeautifulSoup并且在一开始遇到了障碍。我查找了类似的帖子,但没有找到解决我的具体问题,或者有一些基本的我不理解。我的目标是从这个页面中提取日语单词及其英文翻译和示例。
https://iknow.jp/courses/566921
并将它们保存在dataFrame或csv文件中。
我能够看到解析的输出和一些标签的内容,但每当我尝试用我感兴趣的类请求某些东西时,我都没有得到任何结果。首先,我想得到一个日语单词列表,我想我应该可以这样做:
import urllib
from bs4 import BeautifulSoup
url = ["https://iknow.jp/courses/566921"]
data = []
for pg in url:
r = urllib.request.urlopen(pg)
soup = BeautifulSoup(r,"html.parser")
soup.find_all("a", {"class": "cue"})
但是当我搜索响应字段时,我什么也得不到:
responseList = soup.findAll('p', attrs={ "class" : "response"})
for word in responseList:
print(word)
我试图通过寻找孩子来移动树,但无法找到我想要的文本。我将非常感谢你的帮助。以下是我要提取的字段:
在jxpython的大力帮助之后,我现在已经陷入了一个新的挑战(也许这应该是一个新的线程,但它是非常相关的,所以也许这里没关系)。我的目标是创建一个数据框或一个csv文件,每行包含一个日语单词,翻译和带音译的例子。使用以下列表创建列表:
driver.find_elements_by_class_name()
driver.find_elements_by_xpath()
我获得了具有不同数量元素的列表,因此无法轻松创建数据帧。
# len(cues) 100
# len(responses) 100
# len(transliterations)279 stramge number because some words don't have transliterations
# len(texts) 200
# len(translations)200
音译列表包含单个单词和句子的音译组合。我认为能够获取内容来填充我的数据帧的第一行,我需要循环遍历
<li class="item">
content(xpath?#/ html / body / div2 / div / div / section / div / section / div / div / ul / li1)并为每个提取翻译,句子和音译的单词...我不确定如果这是最好的方法,但......
例如,我希望在我的数据框的第一行(从屏幕截图中突出显示的框中)获得的信息是:
去,去,去,周日去图书馆。 ,我会去纽约。我去游泳池度暑假。 ,我去游泳池度暑假。我暑假去了游泳池。
您尝试抓取的标签不在源代码中。可能是因为页面是JavaScript呈现的。试试这个网址看看自己:
视图源:https://iknow.jp/courses/566921
Python模块Selenium解决了这个问题。如果您希望我能为您开始编写一些代码。
以下是一些代码:
from selenium import webdriver
url = 'https://iknow.jp/courses/566921'
driver = webdriver.Chrome()
driver.get(url)
driver.implicitly_wait(2)
cues = driver.find_elements_by_class_name('cue')
cues = [cue.text for cue in cues]
responses = driver.find_elements_by_class_name('response')
responses = [response.text for response in responses]
texts = driver.find_elements_by_xpath('//*[@class="sentence-text"]/p[1]')
texts = [text.text for text in texts]
transliterations = driver.find_elements_by_class_name('transliteration')
transliterations = [transliteration.text for transliteration in transliterations]
translations = driver.find_elements_by_class_name('translation')
translations = [translation.text for translation in translations]
driver.close()
注意:首先需要安装webdriver。我选择镀铬。这是一个链接:https://chromedriver.storage.googleapis.com/index.html?path=2.41/。还要将此添加到您的路径中!如果您有任何其他问题,请告诉我们!