read.Lines URL

时间:2018-01-28 08:36:15

标签: r web-crawler readline

为了在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 /之后自动检索所有可能的文件并让我的代码运行它们?尽管有一些谷歌,我还没有找到任何东西。它需要写一个函数吗?如果是这样,有人请指出我正确的方向吗? 谢谢!

1 个答案:

答案 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