捕获多个博客帖子并连接

时间:2014-03-04 04:06:44

标签: parsing web

我不确定哪种语言最适合(或者如果已经有了这个程序),但这是我基本上想做的事情:当给出一个URL时,我希望它转到那个页面,在两者之间捕获文本某些html标签(每页只有一次),然后单击“下一步”按钮并移至下一页(并重复直到完成)。然后将整个事物导出为.pdf或类似的东西(.txt甚至可以工作)。 如果程序可以在每个帖子之间打印水平规则,但不是必需的

我只需要这个工作一次,事实上,这里是我要复制帖子的博客:http://www.trailjournals.com/entry.cfm?id=336394(我基本上只是不想花点时间点击所有这些)。

我知道一些JavaScript,一些基本的正则表达式,以及一些HTML以及其他几个在这里不适用的(我是一个快速学习者),所以我在这里学习,而不仅仅是要求某人为我做点什么。

谢谢!

1 个答案:

答案 0 :(得分:0)

可能有更好的方法,但由于我是一名工科学生(而Matlab目前是我最擅长的编程语言),我决定看看能否通过那里完成。它起作用了。

当然,有些事情可能会做得更好(我真的不太了解正则表达式,所以我使用了很多“findstr”)。

clear;
clc;
fid=fopen('journals.txt','w');
fprintf(fid,'');
fclose('all');
fid=fopen('journals.txt','a');

id=input('Enter the starting id number: ','s');
loop=1;
while loop==1
    clc;

    url=strcat('http://www.trailjournals.com/entry.cfm?id=',id)

    strContents=urlread(url);

    f=findstr('</TABLE>',strContents);
    f=f(1)+13;
    l=findstr('<p>',strContents);
    l=l(end)-5;
    if f>l(end)
        f=findstr('<blockquote>',strContents);
        f=f(1)+14;
    end

    p=strContents(1,f:l)

    if isempty(p)==1
        cprintf('red','EMPTY ENTRY!\n');
        return;
    end


%     disp(p);
%     disp('------------');
%     ques=input('Does this look good? (y/n): ','s');
%     disp('------------');
%     
%     while ques=='n'
%         firstword=input('Enter the first word: ','s');
%         lastword=input('Enter the last word: ','s');
%         f=findstr(firstword,strContents);
%         l=findstr(lastword,strContents);
%         p=strContents(1,f:l+length(lastword));
%         disp(p);
%         disp('------------');
%         ques=input('Does this look good? (y/n): ','s');
%         disp('------------');
%     end

    fprintf(fid,p);
    fprintf(fid,'\n');
    fprintf(fid,'\r\n\r\n-------------------------------------------\r\n\r\n');

    %Next URL: next:next+6
    next=findstr('">Next</a>',strContents);
    if isempty(next)==1
        break;
    end
    next=next(1);
    next=next-6;
    id=strContents(1,next:next+5);
    url=strcat('http://www.trailjournals.com/entry.cfm?id=',id);
end

fclose('all');
cprintf('Green','The process has been completed\n');