【发布时间】:2020-04-24 21:35:09
【问题描述】:
我正在创建一个 Instagram 网络爬虫(用于练习)。我正在使用 Selenium 来处理动态网页。我使用
加载网页driver.execute_script("return document.documentElement.outerHTML")
(这是在 python 中通过 selenium 运行的 javascript DOM 行)
当我打印存储该函数的输出的变量时,我可以看到带有类的标签。但是在我用 BeautifulSoup 解析它之后(像这样:
soup(jspage, "html.parser"))
然后打印出结果,我再也找不到标签和类了。如果您需要更多详细信息,我很乐意提供,请尽管询问。
这是发生错误的代码的sn-p:
driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/ul/li[3]/a').click()
time.sleep(5)
jspage = driver.execute_script("return document.documentElement.outerHTML")
print(jspage)
page = soup(jspage, "html.parser")
print(page)
elements = page.findAll("a", {"class":"FPmhX notranslate _0imsa "})
print(elements)
for element in elements:
print(elements.text)
变量 jspage 确实包含
FPmhX notranslate _0imsa
类名(只是为了澄清,空格不是拼写错误,它们是类名的一部分)而 page 变量没有,因此在打印出 elements 变量时返回一个空列表。这是该页面的链接(我知道有更好的方法可以做到这一点,但它们都会限制我只能抓取这一页)
https://www.instagram.com/realdonaldtrump/following/
如果您需要我发布完整的代码,我很乐意这样做。
更新 1:我尝试对 BeautifulSoup 使用 lxml 解析器而不是 html.parser,得到了相同的结果。
更新 2: 我尝试将 findAll 更改为 find,但仍然没有得到任何输出。我认为这证明问题出在这一行:
page = soup(jspage, "html.parser")
但我不想影响任何人的意见。
回答:我已经在下面发布了答案,我会尽可能接受
【问题讨论】:
-
类名有空格吗
FPmhX notranslate _0imsa可以发html代码吗 -
@0m3r 是的,该课程中确实有空格。我认为这就是问题所在。如果是这样,我该如何解决?原始 HTML 来自 instagram,所以在这里发布太长了。
-
可以发链接吗
-
当然。该链接指向唐纳德特朗普的 Instagram 个人资料,但实际的 HTML 来自打开一个对话框的
Following列表项。我正试图刮掉他追随的人的名字。我希望这也适用于其他用户。这是他个人资料的链接:https://www.instagram.com/realdonaldtrump/following/@0m3r -
我正在尝试抓取他关注的人的姓名 - 这可能是通过 xhr 查询加载的,如果您打开网络选项卡,您可以看到您的浏览器开发者工具。
标签: javascript python selenium web-scraping beautifulsoup