Python BeatifulSoup 抓取动态容器

时间:2021-07-25 03:49:57

标签: python html web-scraping beautifulsoup

我正在尝试从 this 网站抓取一些抽认卡,但遇到了一些问题。下面是我的代码片段:

# point to the right link and chapter
url_main = r'https://learninglink.oup.com/access/content/neuroscience-sixth-edition-student-resources/neuroscience-6e-chapter-1-flashcards?previousFilter=tag_chapter-'
chapter = '01'
url_main = url_main + chapter

# get source
html = requests.get(url_main).text
bs = BeautifulSoup(html, features="html.parser")

如果我在 Chrome 上检查页面,我可以看到我要查找的信息在 class="box1text" 中。所以我这样做:

# get class
text = bs.find(class_ = "box1text" )

但是,当我打印这个“文本”变量时,我得到:

<span aria-live="assertive" class="box1text"></span>

并且没有提及我正在寻找的文本。我做错了什么?

另外,我想知道如何与这个容器及其按钮进行交互,但我什至不知道从哪里开始。我的理想输出是一个包含所有关键字和相关答案的字典(因此,每个抽认卡的卡片正面和背面),但要做到这一点,我需要能够与这个容器进行交互。有关如何执行此操作的任何建议?

提前致谢!

1 个答案:

答案 0 :(得分:3)

我知道这不能回答您的问题,但实际上有更好的方法来解决这个问题。

如果您进入浏览器的 devTools 侧边栏,并检查网络日志, 您会看到发送了一个 Http 请求以获取所有抽认卡信息:screenshot

如您所见,您需要做的就是通过复制请求标头并发送来模拟此 http 请求。 由于我不使用 python,我只会在 windows 命令提示符下使用 cUrl。 您现在也可以通过 right clicking 在浏览器打开并点击 'copy as Curl(cmd)' 的确切请求上执行此操作,然后将您获得的任何内容粘贴到命令提示符中,您应该获得所需的文本您可以轻松阅读enter image description here

编辑: 此外,您帖子中的站点不需要在请求中发送任何其他参数,因此您应该能够逃脱:

curl "https://learninglink.oup.com/protected/files/content/flashcardCsv/1512079199667-Neuroscience6e-ch01_flashcards.csv"

你可以复制粘贴到cmd里面自己验证