我正在用Selenium和nokogiri抓取Instagram,我想完善我的代码



首先,英语不是我的第一语言,如果有什么东西写得很奇怪,我很抱歉。一位老师要求我下载instagram个人资料的照片,所以我决定使用ruby、selenium和nokogiri。在经历了很多不幸之后,我成功了,但我认为这不是一个好的方式。现在我正在选择每个img元素,然后使用ruby查找其中的链接。

arr = doc.search('img').map(&:values)
images = []
arr.each do |ele|
ele.each do |link|
if link.include?("cover")
images << ele[-2]
end
end
end

我似乎找不到一个好的方法来找到链接只使用nokogiri。链接在srcset中,但我无法使用nokogiri的通用方式访问它,我认为可以搜索它,但我不知道如何搜索。我知道这是不推荐的,但我包含了一张数据图片,因为格式很难看。Nokogiri图片

除此之外,我还有一个关于滚动的问题,因为我只硬编码了几个这样的滚动:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
sleep 1
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
sleep 1
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
sleep 2

我想也许我可以监控arr = doc.search('img').map(&:values)的长度,但如果我添加更多的卷轴,长度就会开始缩小,我还不知道为什么。

正如你所看到的,我的代码有点糟糕。我想更好地了解nokogiri和selenium web驱动程序,如果有人能推荐一个很好的资源来学习这些主题(或者我只需要第三次阅读文档?(,我真的很感激。

最后是完整代码的链接https://pastebin.com/fscHf6Ah,因为也许总的来说有人能给我指点迷津。提前感谢您花时间阅读并提供帮助。

我建议专注于基础知识,因为它们比Nokogiri和Selenium:的任何细节都更重要,适用范围更广

变量命名

links是一个不错的变量名示例。然而,sele2clean很少表明它们是什么以及它们的用途。我对它们是什么的猜测(我可能错了(以及更合适的名称可能是:attrs_with_slash_pattrimg_rel_urls

我鼓励你甚至使用字典和词库来帮助找到更好的名字&文字。尽管英语是我的第一语言,但我一直在做!

变量命名2

通常,如果你不能为某个东西想出一个好名字,代码可以重新组织,这样你就可以创建不同的";事物;可以用一个好名字更好地识别。一个恰当的例子是:;CCD_ 9";是一个尴尬的名字和尴尬的";事物;(抽象(创造的。

这里有一个替代示例:

link_attrs = links.flat_map { |ele| ele.to_a }
# "link_attrs" is a more natural name and "thing"
img_rel_urls = link_attrs.flat_map do |attr|
attr.scan(//p/.+/) # .include?('/p') not needed, this produces a strict subset
end

在Ruby/wEnumerable中升级

您将从上面的示例中看到,我使用了flat_map/map,而不是each<<

Ruby的CCD_ 15具有非常强大的&与许多其他语言相比,API是有用的。和他们一起玩,了解他们做什么。充分利用它的半功能界面将大大改进你的代码。

相关内容

  • 没有找到相关文章

最新更新