为了在R中进行一些文本分析,我想下载几个设计非常相似的网页。我已经尝试了几个页面,这段代码确实只保留了我感兴趣的行。
thepage= readLines("http://example/xwfw_665399/s2510_665401/t1480900.shtml")
thepage2 = readLines("http://example/xwfw_665399/s2510_665401/2535_665405/t851768.shtml")
mypattern1 = '<P style=\\"FONT.*\\">'
datalines1 = grep(mypattern1,thepage[1:length(thepage)],value=TRUE)
datalines2 = grep(mypattern1,thepage2[1:length(thepage)],value=TRUE)
mypattern2 = '<STRONG>'
mypattern3 = '</STRONG>'
mypattern4 = '</P>'
page1=gsub(mypattern1,"",datalines1)
page1=gsub(mypattern2,"", page1)
page1=gsub(mypattern3,"",page1)
page1=gsub(mypattern4,"",page1)
page2=gsub(mypattern1,"",datalines2)
page2=gsub(mypattern2,"", page2)
page2=gsub(mypattern3,"",page2)
page2=gsub(mypattern4,"",page2)
正如您所看到的,URLS非常相似,以s2510_665401 /结尾 现在,我想知道,有没有办法在s2510_665401 /之后自动检索所有可能的文件并让我的代码运行它们?尽管有一些谷歌,我还没有找到任何东西。它需要写一个函数吗?如果是这样,有人请指出我正确的方向吗? 谢谢!
答案 0 :(得分:0)
这不是最终的工作答案,我很少进行网络抓取,所以不确定这对其他网页有多好,但它可以帮助你朝着正确的方向发展。考虑this page。我们可以编写一个提取所有Series
元素的函数,然后我们可以使用相同的函数再次爬行以获取它们的引用。
因此,在下面的代码中,%timeit df.numbers ** 3
10000 loops, best of 3: 179 µs per loop
包含深度为一级的所有.html
个网页,unique(refs_1)
包含两个级别的所有.html
个网页。
您仍然需要一个包装器在一定次数的迭代后停止,可能会阻止重新抓取已访问过的页面(unique(refs_2)
)等。
当您拥有要抓取的所有URL时(在本例中为.html
),您应该将自己的读取脚本包装在函数中,并调用setdiff(refs_2,refs_1)?
,其中x是URL的列表/数组, unique(c(refs_1,refs_2))
是你的职能。
无论如何,希望这有帮助!
lapply(x,f)
示例输出:
f