正则表达的问题和如何抓取网页信息

3 views
Skip to first unread message

xuanshi

unread,
Jul 29, 2010, 10:18:14 AM7/29/10
to PerlChina Mongers 讨论组
Hi all


1,我在做 正则表达时, 我用了如下的语句: if ($KnowEn[$i] =~ /\$Instance/)
{
print $KnowEn[$i] ."\n";
}
系统总是对这个报错。我想知道,是什么原因呢 ? 我现在猜测是:$KnowEn[$i]与循环有关,出了问题,环不下去,还有原文件里有空白的行。


2, 另外,我想从一个网页里,把我需要的信息抓取下来,要从哪里入手呢?比如这个网站:
http://www2.chkd.cnki.net/kns50/Dict/dict_list.aspx?firstLetter=B#
有如下信息,有些是重要的,有些不重要。
1 11-beta-Hydroxysteroid Dehydrogenase Type 1 11-β-羟甾脱氢酶1型 2 0 0 0
2 11-beta-Hydroxysteroid Dehydrogenase Type 2 11-β-羟甾脱氢酶2型 0 0 0 0
3 11-beta-Hydroxysteroid Dehydrogenases 11-β-羟甾脱氢酶类 73 23 12 1
4 4-(3-Butoxy-4-methoxybenzyl)-2-imidazolidinone 4-(3-丁氧基-4-甲氧基苄基)-2-咪唑
啉酮 0 0 0 0
5 4-1BB Ligand 4-1BB配体 80 24 24 0
6 4-Butyrolactone 4-丁内酯 74 16 2 5
7 8-Bromo Cyclic Adenosine Monophosphate 8-溴环腺苷一磷酸 9 1 0 0
8 B-Cell Activating Factor B-细胞激活因子 96 37 33

azure wang

unread,
Jul 29, 2010, 7:59:05 PM7/29/10
to perl...@googlegroups.com
用 xpath


--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perl...@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+...@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。




--
Azure.Wang

azure wang

unread,
Jul 29, 2010, 8:12:42 PM7/29/10
to perl...@googlegroups.com
//table[contains(concat(' ', @class, ' '), ' GridTableContent ')]//tr[not(@align)]//td[1]   第一列    1,2,3,4....
//table[contains(concat(' ', @class, ' '), ' GridTableContent ')]//tr[not(@align)]//td[2]   第二列   
11-beta-Hydroxysteroid Dehydrogenase Type 1  ...
//table[contains(concat(' ', @class, ' '), ' GridTableContent ')]//tr[not(@align)]//td[3]   第三列    11-β-羟甾脱氢酶1型   ...

......
--
Azure.Wang

Qiang (James)

unread,
Jul 29, 2010, 9:33:20 PM7/29/10
to perl...@googlegroups.com
xuanshi wrote:
> Hi all
>
>
> 1�������� ������ʱ�� ���������µ���䣺 if ($KnowEn[$i] =~ /\$Instance/)

> {
> print $KnowEn[$i] ."\n";
> }
> ϵͳ���Ƕ�������?����֪������ʲôԭ���� �� �����ڲ²��ǣ�$KnowEn[$i]��ѭ���йأ��������⣬������ȥ������ԭ�ļ����пհ׵��С�
>

��ʲô�?����Ҫ�Ĵ�����Ϣ�벻Ҫʡ�ԡ�

>
>
>
> 2�� ���⣬�����һ����ҳ�������Ҫ����Ϣץȡ������Ҫ�����������أ����������վ��
> http://www2.chkd.cnki.net/kns50/Dict/dict_list.aspx?firstLetter=B#
> ��������Ϣ����Щ����Ҫ�ģ���Щ����Ҫ��

����Ҫ��ץ��ҳ(ͨ�� LWP �� WWW::Mechanize ����)��Ȼ�������ݵķֲ���ƥ
��(�����ͨ������ƥ����� CPAN �ϵ�һЩģ��)��

���� LWP ��һ���̳� http://wiki.perlchina.org/LWP��WEB�Ļ�ʹ��

������Ҫץȡ����������һ�� html table ������ʹ��
CPAN(search.cpan.org) ���ڶ�Ľ��� table ��ģ�飬���� HTML::TableExtract
�� HTML::TableParser��

Qiang (James)

cnhack TNT

unread,
Jul 30, 2010, 6:03:03 AM7/30/10
to perl...@googlegroups.com
网页信息抽取,用 Web::Scraper 会方便得多



2010/7/30 Qiang (James) <shij...@gmail.com>
xuanshi wrote:
> Hi all
>
>
> 1,我在做 正则表达时, 我用了如下的语句: if ($KnowEn[$i] =~ /\$Instance/)

>                                       {
>                                               print $KnowEn[$i] ."\n";
>                                       }
> 系统总是对这个报错。我想知道,是什么原因呢 ? 我现在猜测是:$KnowEn[$i]与循环有关,出了问题,环不下去,还有原文件里有空白的行。
>

报什么错?最重要的错误信息请不要省略。


>
>
>
> 2, 另外,我想从一个网页里,把我需要的信息抓取下来,要从哪里入手呢?比如这个网站:
> http://www2.chkd.cnki.net/kns50/Dict/dict_list.aspx?firstLetter=B#
> 有如下信息,有些是重要的,有些不重要。

你需要先抓网页(通过 LWP 或 WWW::Mechanize 即可),然后根据内容的分布来匹
配(你可以通过正则匹配或是 CPAN 上的一些模块)。

这是 LWP 的一个教程 http://wiki.perlchina.org/LWP与WEB的基本使用

鉴于你要抓取的内容是在一个 html table 里,你可以使用
CPAN(search.cpan.org) 上众多的解析 table 的模块,例如 HTML::TableExtract
和 HTML::TableParser。

Qiang (James)

azure wang

unread,
Aug 1, 2010, 9:31:43 PM8/1/10
to perl...@googlegroups.com
HTML::Selector::XPath;
配合HTML::TreeBuilder::XPath;很强大 用CSS选择器的语法获取内容   和Jquery类似的语法  非常方便
 比如
 
div#footer a   id是footer的div 下的所有连接

--
Azure.Wang

snyh

unread,
Aug 1, 2010, 9:54:20 PM8/1/10
to perl...@googlegroups.com
HTML::TreeBuilder::Select

两者的整合

Beckheng Lam

unread,
Aug 1, 2010, 11:20:02 PM8/1/10
to perl...@googlegroups.com
��û������⼸��ģ������benchmark?

snyh �:
> HTML::TreeBuilder::Select
>
> ���ߵ����
>
> �� 2010��8��2�� ����9:31��azure wang <azur...@gmail.com> ���
>
>> HTML::Selector::XPath��
>> ���HTML::TreeBuilder::XPath;��ǿ�� ��CSSѡ����������ȡ���� ��Jquery���Ƶ��� �dz�����
>> ����
>>
>> div#footer a id��footer��div �µ���������
>>
>> �� 2010��7��30�� ����6:03��cnhack TNT <cnha...@gmail.com>���
>>
>>> ��ҳ��Ϣ��ȡ���� Web::Scraper �᷽��ö�


>>> http://perlchina.org/advent/2009/WebScraper.html
>>>
>>> 2010/7/30 Qiang (James) <shij...@gmail.com>
>>>
>>>> xuanshi wrote:
>>>>
>>>>> Hi all
>>>>>
>>>>>

>>>>> 1�������� ������ʱ�� ���������µ���䣺 if ($KnowEn[$i] =~ /\$Instance/)


>>>>> {
>>>>> print $KnowEn[$i] ."\n";
>>>>> }

>>>>> ϵͳ���Ƕ�������?����֪������ʲôԭ���� �� �����ڲ²��ǣ�$KnowEn[$i]��ѭ���йأ��������⣬������ȥ������ԭ�ļ����пհ׵��С�
>>>>>
>>>>>
>>>> ��ʲô�?����Ҫ�Ĵ�����Ϣ�벻Ҫʡ�ԡ�
>>>>
>>>>
>>>>>
>>>>> 2�� ���⣬�����һ����ҳ�������Ҫ����Ϣץȡ������Ҫ�����������أ����������վ��
>>>>> http://www2.chkd.cnki.net/kns50/Dict/dict_list.aspx?firstLetter=B#
>>>>> ��������Ϣ����Щ����Ҫ�ģ���Щ����Ҫ��
>>>>>
>>>> ����Ҫ��ץ��ҳ(ͨ�� LWP �� WWW::Mechanize ����)��Ȼ�������ݵķֲ���ƥ
>>>> ��(�����ͨ������ƥ����� CPAN �ϵ�һЩģ��)��
>>>>
>>>> ���� LWP ��һ���̳� http://wiki.perlchina.org/LWP��WEB�Ļ�ʹ��
>>>>
>>>> ������Ҫץȡ����������һ�� html table ������ʹ��
>>>> CPAN(search.cpan.org) ���ڶ�Ľ��� table ��ģ�飬���� HTML::TableExtract

>>>> �� HTML::TableParser��
>>>>
>>>> Qiang (James)
>>>>
>>>>
>>>>
>>>
>>
>> --
>> Azure.Wang
>>
>>
>
>


--
Perl���� -- http://www.perlersh.org
�ҵIJ��� -- http://www.perlersh.org/blog.html
���Ե������˵����
�˷���Ե�����Ǵ�ɳ��˵��

xuanshi

unread,
Aug 2, 2010, 5:52:42 AM8/2/10
to PerlChina Mongers 讨论组
这个是报错的信息: Unmatched ) in regex; marked by <-- HERE in m/
chinese_anno_2_en_Instance_1008]) <-- HERE

xuanshi

unread,
Aug 4, 2010, 10:02:06 AM8/4/10
to PerlChina Mongers 讨论组
找到原因了,应该是因为那个源文件里的( ,]等等符号,正则判断时, 会对结果有影响,从而找不到正解

Beckheng Lam

unread,
Aug 4, 2010, 10:09:56 AM8/4/10
to perl...@googlegroups.com
HTML::TreeBuilder::Select��Web::Scraper�õ��ƺ���ͬ���ģ��࣡�
�о�Web::Scraper�ĸ�������á�������Ч���Dz��ġ�
�����Ч�ʵĻ���HTML::Parser�Ǹ�õġ�

Beckheng Lam �:

Reply all
Reply to author
Forward
0 new messages