生信菜鸟团博客2周年精选文章集(5)seq-answer和bio-star论坛爬虫

生信常用论坛seq-answer里面所有帖子爬取

生信常用论坛bio-star里面所有帖子爬取

这个是爬虫专题第一集,主要讲如何分析bio-star这个网站并爬去所有的帖子列表,及标签列表等等,前提是读者必须掌握perl,然后学习perl的LWP模块,可以考虑打印那本书读读,挺有用的!

http://seqanswers.com/ 这个是首页

http://seqanswers.com/forums/forumdisplay.php?f=18 这个共570个页面需要爬取

http://seqanswers.com/forums/forumdisplay.php?f=18&order=desc&page=1

http://seqanswers.com/forums/forumdisplay.php?f=18&order=desc&page=570

<tbody id=”threadbits_forum_18″>这个里面包围这很多<tr>对,

前五个<tr>对可以跳过,里面的内容不需要

这样就可以捕获到所有的目录啦!

首先我们看看如何爬去该论坛主页的板块构成,然后才进去各个板块里面继续爬去帖子。

接下来看进入各个板块里面爬帖子的代码,可以直接复制张贴使用的!

[perl]

use LWP::Simple;

use HTML::TreeBuilder;

use Encode;

use LWP::UserAgent;

use HTTP::Cookies;

my $tmp_ua = LWP::UserAgent->new; #UserAgent用来发送网页访问请求

$tmp_ua->timeout(15); ##连接超时时间设为15秒

$tmp_ua->protocols_allowed( [ ‘http’, ‘https’ ] ); ##只允许http和https协议

$tmp_ua->agent(

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;.NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

) ;

$base=’https://www.biostars.org';

open FH_IN,"index.txt";

while (<FH_IN>) {

chomp;

@F=split;

open FH_OUT,">index-$F[1].txt";

$total_pages=int($F[2]/40)+1;

foreach (1..$total_pages){

my $url = URI->new("$F[0]/?");

my($sort,$page) = ("update",$_);#

$url->query_form(

‘page’ => $page,

‘sort’ => $sort,

);

&get_each_index($url,’FH_OUT’);

print $url."\n";

}

}

sub get_each_index{

my ($url,$handle)=@_;

$response = $tmp_ua->get($url);

$html=$response->content;

my $tree = HTML::TreeBuilder->new; # empty tree

$tree->parse($html) or print "error : parse html ";

my @list_title=$tree->find_by_attribute(‘class’,"post-title");

foreach (@list_title) {

my $title = $_->as_text();

my $ref = $_->find_by_tag_name(‘a’)->attr(‘href’);

print $handle "$base$href,$title\n";

}

}

[/perl]

这样就可以爬去帖子列表了

https://www.biostars.org/t/rna-seq rna 1573

https://www.biostars.org/t/R R 1309

https://www.biostars.org/t/snp snp 1268

等等“““““““““““““““““““““““““““““`

帖子文件如下,在我的群里面共享了所有的代码及帖子内容,欢迎加群201161227,生信菜鸟团!

生信常用论坛seq-answer里面所有帖子爬取

这个是爬虫专题第二集,主要讲如何分析seq-answer这个网站并爬去所有的帖子列表,及标签列表等等,前提是读者必须掌握perl,然后学习perl的LWP模块,可以考虑打印那本书读读,挺有用的!

其实爬虫是个人兴趣啦,跟这个网站没多少关系,本来一个个下载,傻瓜式的重复也能达到目的。我只是觉得这样很有技术范,哈哈,如何大家不想做傻瓜式的操作可以自己学习学习,如果不懂也可以问问我!

http://seqanswers.com/这个是主页

http://seqanswers.com/forums/forumdisplay.php?f=18 这个共570个页面需要爬取

其中f=18 代表我们要爬去的bioinformatics板块里面的内容

http://seqanswers.com/forums/forumdisplay.php?f=18&order=desc&page=1

http://seqanswers.com/forums/forumdisplay.php?f=18&order=desc&page=570

<tbody id=”threadbits_forum_18″>这个里面包围这很多<tr>对,

前五个<tr>对可以跳过,里面的内容不需要

这样就可以捕获到所有的目录啦!

我这个直接把所有代码贴出了啦

[perl]

use LWP::Simple;

use HTML::TreeBuilder;

use Encode;

use LWP::UserAgent;

use HTTP::Cookies;

my $tmp_ua = LWP::UserAgent->new; #UserAgent用来发送网页访问请求

$tmp_ua->timeout(15); ##连接超时时间设为15秒

$tmp_ua->protocols_allowed( [ ‘http’, ‘https’ ] ); ##只允许http和https协议

$tmp_ua->agent(

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;.NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

) ;

open FH_OUT ,">bioinformatics.csv";

$total_pages=571;

foreach (1..$total_pages){

my $url = URI->new("http://seqanswers.com/forums/forumdisplay.php?");

my($f,$page) = (18,$_);#

$url->query_form(

‘f’ => $f,

‘order’=> ‘desc’,

‘page’ => $page,

);

&get_each_index($url,’FH_OUT’);

print $url."\n";

}

sub get_each_index{

my ($url,$handle)=@_;

$response = $tmp_ua->get($url);

$html=$response->content;

my $tree = HTML::TreeBuilder->new; # empty tree

$tree->parse($html) or print "error : parse html ";

$tmp=$tree->find_by_attribute("id","threadbits_forum_18");

next unless $tmp;

my @list_tr=$tmp->find_by_tag_name(‘tr’);

shift @list_tr;shift @list_tr;shift @list_tr;shift @list_tr;shift @list_tr;

foreach (@list_tr) {

my @list_td=$_->find_by_tag_name(‘td’);

#print $_->as_text;

next unless @list_td>4;

my $brief=$list_td[2]->attr(‘title’);

my $title=$list_td[2]->find_by_tag_name(‘a’)->as_text();

my $href=$list_td[2]->find_by_tag_name(‘a’)->attr(‘href’);

my $author=$list_td[3]->as_text();

#print $handle "$base$href\t$title\t$author\t$brief\n";

print $handle "$base$href\t$title\t$author\n";

}

}

[/perl]

帖子列表如下:

共17109个帖子。

原文发布于微信公众号 - 生信技能树(biotrainee)

原文发表时间:2017-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

在MongoDB中实现聚合函数

随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据。传统方法存储和处理数据的成本将会随着数据量增长而显...

2577
来自专栏施炯的IoT开发专栏

Mouse Gestures on Windows Mobile

         Windows Mobile设备屏幕比较小,设计合理的UI很重要。众所周知,在PC机上使用的软件,如遨游(Maxthon),是支持鼠标手势的。...

19210
来自专栏FreeBuf

【永不消逝的电波(二)】HackRF入门:家用无线门铃信号重放

0x00 前言 在第一篇文章:永不消逝的电波(一):无线电入门篇 我们了解了一下无线电的发展史以及无线电的一些物理知识,在第二篇里我们将用HackRF录制家用...

2607
来自专栏.NET开发者社区

.NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...

前言 在以前的一篇文章中,为大家分享了《什么是ORM?为什么用ORM?浅析ORM的使用及利弊》。那么,在目前的.NET(C#)的世界里,有哪些主流的ORM,Sq...

5709
来自专栏Fundebug

30个极大提高开发效率的Visual Studio Code插件

译者按: 看完这篇文章,我打算从 Sublime Text 转到 Visual Studio Code 了!

2976
来自专栏Web 开发

又是一年PC操作系统三国鼎立的时刻~

Win8 在今早零时,发布开发者预览版,Lion已经发布多时,Ubuntu11.10的正式版也已经逼近

780
来自专栏睿哥杂货铺

SDN 技术指南(四):Open vSwitch

由之前发布的文章知道 Open vSwitch(Open Source Virtual Switch) 是一款基于软件实现的开源虚拟交换机。

2706
来自专栏杨建荣的学习笔记

服务器硬件问题整理的一点总结 (r7笔记第70天)

之前写过一篇通过shell来监控磁盘坏块的文章 http://blog.itpub.net/23718752/viewspace-1872978/ 从使用情况来...

3807
来自专栏点滴积累

OpenStack(企业私有云)万里长征第一步——安装

一、前言 单位新进了十几台服务器,建了一个高标准的一体化机房,状似刘姥姥进大观园的我,从机房规划到企业私有云搭建一一重头学来,除了机房泥墙其他基本都涉猎到了。 ...

4786
来自专栏偏前端工程师的驿站

.Net魔法堂:史上最全的ActiveX开发教程——开发篇

一、前言                                   在设计某移动内部自动化运维平台时,经综合考虑终端机性能和功能需求等因素后,决定采用...

1987

扫码关注云+社区