使用python(无论是否使用BeautifulSoup)按块刮取大型html。内存约束

使用python(无论是否使用BeautifulSoup)按块刮取大型html。内存约束,python,html,beautifulsoup,Python,Html,Beautifulsoup,我试图用Python的基本编码在Instagram中提取追随者列表,因为我既不擅长Python也不擅长HTML。所以,我的方法是模拟类人迭代 基本上,我使用Selenium打开Instagram追随者页面,使用基本Python编码向下滚动无限滚动,并使用BeautifulSoup删除列表 问题是,经过几个小时的滚动,我达到了我的内存限制,因为列表是巨大的 我目前的做法是: 使用:elemWindow=browser获取无限滚动窗口。通过css选择器('.j6cq2')查找元素。 我向下滚动,直

我试图用Python的基本编码在Instagram中提取追随者列表,因为我既不擅长Python也不擅长HTML。所以,我的方法是模拟类人迭代

基本上,我使用Selenium打开Instagram追随者页面,使用基本Python编码向下滚动无限滚动,并使用BeautifulSoup删除列表

问题是,经过几个小时的滚动,我达到了我的内存限制,因为列表是巨大的

我目前的做法是:

  • 使用:
    elemWindow=browser获取无限滚动窗口。通过css选择器('.j6cq2')查找元素。
  • 我向下滚动,直到列表中出现约30个新用户
  • 获取整个页面的源代码:
    pg1=browser.page\u source
  • 使用SoupStrainer和BeautifulSoup获取整个列表(使用lxml,因为我在这里搜索,人们告诉我它更快,而且确实更快):
filter=SoupStrainer(“a”,“class”:“FPmhX nottranslate zsYNt”})

elm1=bs4.BeautifulSoup(pg1,“lxml”,仅解析=过滤器)

  • 然后,我只将出现的新用户导出到Excel(我有最后一个列表长度和新列表长度,所以我导出差异)
主要问题是,在滚动几个小时后,脚本停止在:
pg1=browser.page\u source
,可能是因为它达到了内存限制

因此,我试图找出如何在计算机内存中只保留下滚后出现的新用户的HTML块,并从这个HTML块中删除小列表


我在这里搜索了ElementTree的
iterparse
htmltext.split
,但我不清楚这是否是要遵循的路径…

为什么不使用内置的selenium方法来获取元素
FPmhX nottranslate zsYNt
?我可以得到这个元素中的用户列表(FPmhX nottranslate zsYNt)不保留整个页面源(pg1=browser.page\u source)?或者那些内置的selenium方法也在整个页面源代码中搜索此元素?因为我认为问题是页面源和用户列表对于计算机内存来说太大了。。。这就是为什么我尝试编写一个脚本,只分析向下滚动生成的新块。是的,内置方法搜索整个页面。但是您可以使用xpath选择器选择最后的
N
元素。下面是一个示例
//a[@class=“FPmhX nottranslate zsYNt”和position()>last()-30]
。相应地更新xpath。在尝试运行整个脚本之前,我正在测试您的建议。因此,elem1=browser.find_elements_by_xpath(“//a[@class='FPmhX notranslate zsYNt'])努力查找整个列表。为了添加position部分,我做了以下操作:elem1=browser.find_elements_by_xpath(“//a[@class='FPmhX nottranslate zsYNt']”)[position()>last()-5],并得到以下错误:NameError:name'position'未定义。然后我这样做了,似乎是正确的格式:elem1=browser.find_elements_by_xpath(“//a[@class='FPmhX nottranslate zsYNt']][position()>last()-5]”,但它一直得到整个列表。怎么了?试试这个xpath它应该可以工作
/genderant或self::a[@class='FPmhX nottranslate zsYNt'][position()>last()-5]
。利用
/后代或自身