小编jru*_*003的帖子

Selenium/python:每次滚动后从动态加载的网页中提取文本

我正在使用Selenium/python自动向下滚动社交媒体网站并抓取帖子.我目前正在提取所有的文字在一个"打" 滚动一定的次数(下面的代码),而是我想只提取每个滚动后的新装入的文字.

例如,如果页面最初包含文本"A,B,C",那么在第一次滚动后它显示"D,E,F",我想要存储"A,B,C",然后滚动,然后存储"D,E,F"等.

我想要提取的具体项目是帖子的日期和消息文本,可以分别使用css选择器'.message-date''.message-body'(例如dates = driver.find_elements_by_css_selector('.message-date'))获得.

任何人都可以建议如何在每次滚动后只提取新加载的文本?

这是我当前的代码(我完成滚动提取所有日期/消息):

from selenium import webdriver
import sys
import time
from selenium.webdriver.common.keys import Keys

#load website to scrape
driver = webdriver.PhantomJS()
driver.get("https://stocktwits.com/symbol/USDJPY?q=%24USDjpy")

#Scroll the webpage
ScrollNumber=3 #max scrolls
print(str(ScrollNumber)+ " scrolldown will be done.")
for i in range(1,ScrollNumber):  #scroll down X times
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3) #Delay between 2 scrolls down to be sure the page loaded
    ## I WANT TO SAVE/STORE ANY NEWLY …
Run Code Online (Sandbox Code Playgroud)

javascript css python selenium selenium-webdriver

11
推荐指数
1
解决办法
1257
查看次数

将项目附加到 R 中现有列表的最有效内存方法是什么?

我在 R 中有一个列表,my_list2如下例所示。

我想以最小化峰值 RAM 使用的方式将项目添加到列表中。

有没有比使用该append函数更节省内存的方法?

我知道最好的做法是创建一个“空”列表,然后按照my_list2下面的示例填充它,但这不是一个选项,因为该列表已经存在。

# If I could create the list from scratch I'd do it list this:
my_list <- vector('list', 10)
for (i in 1:10) {
  my_list[[i]] <- i
}

# Is there a better way than the 'append' function?
my_list2 <- list(1)
for (i in 2:10) {
  my_list2 <- append(my_list2, i)
}
Run Code Online (Sandbox Code Playgroud)

r list

5
推荐指数
1
解决办法
246
查看次数

如何在 R 中嵌套 foreach 循环的内循环和外循环之间添加代码

我读过在 R 中执行嵌套 foreach 循环的正确方法是通过嵌套运算符%:%(例如https://cran.r-project.org/web/packages/foreach/vignettes/nested.html)。

但是,使用这种方法时,不能在内循环和外循环之间添加代码——请参见下面的示例。

有没有办法创建嵌套的、并行的 foreach 循环,以便可以在内循环和外循环之间添加代码?

更一般地说,我想到的显而易见的方法有什么问题,即简单地用%dopar%运算符而不是%:%运算符嵌套两个 foreach 循环?请参阅下面的简单示例。

library(foreach)

# Set up backend
cl = makeCluster(6)
registerDoParallel(cl)
on.exit(stopCluster(cl))

# Run nested loop with '%:%' operator. Breaks if adding code between the inner and outer loops 
foreach(i=1:2) %:% 
  # a = 1 #trivial example of running code between outer and inner loop -- throws error 
  foreach(j = 1:3) %dopar% {
    i * j
  }

# Run nested loop using …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach r doparallel

4
推荐指数
1
解决办法
137
查看次数

检查是否可以使用 RSelenium 向下滚动

我正在使用 RSelenium 自动向下滚动社交媒体网站并保存帖子。有时我到达网页底部,由于没有更多数据可用,因此无法加载更多帖子。我只想能够检查是否是这种情况,以便我可以停止尝试滚动。

如何判断是否可以在 RSelenium 中继续滚动?下面的代码说明了我正在尝试做的事情 - 我想我只需要“if”语句的帮助。

FYI有用于在Python这样的解决方案在这里(基本上检查,如果页面高度迭代是不同的),但我不能在河想出如何实现它(或任何其他解决方案)

# Open webpage
library(RSelenium)
rD = rsDriver(browser = "firefox")
remDr = rD[["client"]]
url = "https://stocktwits.com/symbol/NZDCHF"
remDr$navigate(url) 

# Keep scrolling down page, loading new content each time. 
ptm = proc.time()
repeat {   
  remDr$executeScript("window.scrollTo(0,document.body.scrollHeight);")
  Sys.sleep(3) #delay by 3sec to give chance to load. 

  # Here's where i need help  
  if([INSERT CONDITION TO CHECK IF SCROLL DOWN IS POSSIBLE]) {
    break
  }
}
Run Code Online (Sandbox Code Playgroud)

testing automated-tests rselenium

2
推荐指数
1
解决办法
1310
查看次数

如何使用 R 的 xml2 包获取 XML 文件中所有属性的名称

我正在尝试使用 R 的 xml2 包获取 XML 文件中所有属性的名称。

我可以使用该函数获取单个级别的属性名称xml_attrs(),但无法弄清楚如何获取所有级别的属性。请参阅下面的示例。

非常感谢任何帮助。

library(xml2)
library(dplyr)

# Make up some data
dat <- read_xml(
  "<LEVEL1 attr_lvl1='a'>
    <LEVEL2 attr_lvl2='b'>
    </LEVEL2>
    <LEVEL2 attr_lvl2='c'>
    </LEVEL2>  
  </LEVEL1>"  
)

# I know how to get the attributes for each level...
names(xml_attrs(dat)) #"attr_lvl1"
names(xml_attrs(xml_child(dat, 'LEVEL2'))) #"attr_lvl2"

# Want code which returns the names of attributes across 
# *all* levels, i.e. should return "attr_lvl1", "attr_lvl2"
Run Code Online (Sandbox Code Playgroud)

xml r xml2

1
推荐指数
1
解决办法
786
查看次数