我正在使用Outwit中心来抓取城市,州和国家的网站(仅限美国和加拿大)。通过该程序,我可以使用正则表达式来定义标记前后我想要抓取的文本。我还可以定义所需文本的格式。
以下是html的示例:
<td width="8%" nowrap="nowrap"></td>
<td width="22%" nowrap="nowrap"><strong>
BILLINGS, MT
USA</strong></td>
<td width="10%" align="right" nowrap="nowrap">
我已经设置了我的reg.ex.如下:
CITY - 之前 (未编入正则表达式)
<td width="22%" nowrap="nowrap"><strong>
CITY - 在 之后(州,领地和普罗旺斯的帐户)
/(,\s|\bA[BLKSZRAEP]\b|\bBC\b\bC[AOT]\b|\bD[EC]\b|\bF[LM]\b|\bG[AU]\b|\bHI\b|\bI[ADLN]\b|\bK[SY]\b|\bLA\b|\bM[ABDEHINOPST]\b|\bN[BLTSUCDEHJMVY]\b|\bO[HKNR]\b|\bP[AERW]\b|\bQC\b|\bRI\b|\bS[CDK]\b|\bT[NX]\b|\bUT\b|\bV[AIT]\b|\bW[AIVY]\b|\bYT\b|\bUSA|\bCanada)/
状态 - 之前
\<td width="22%" nowrap="nowrap"\>\<strong\>\s|,\s
状态 - 在
之后/\bUSA\<\/strong\>\<\/td\>|\bCanada\<\/strong\>\<\/td\>/
状态 - 格式
/\b[A-Z][A-Z]\b/
国家/地区 - 之前 (州,领地和普罗旺斯的帐户)
/(\bA[BLKSZRAEP]\b|\bBC\b\bC[AOT]\b|\bD[EC]\b|\bF[LM]\b|\bG[AU]\b|\bHI\b|\bI[ADLN]\b|\bK[SY]\b|\bLA\b|\bM[ABDEHINOPST]\b|\bN[BLTSUCDEHJMVY]\b|\bO[HKNR]\b|\bP[AERW]\b|\bQC\b|\bRI\b|\bS[CDK]\b|\bT[NX]\b|\bUT\b|\bV[AIT]\b|\bW[AIVY]\b|\bYT\b)\s/
国家/地区 - 之后 (未合并为正则表达式)
</strong></td><td width="10%" align="right" nowrap="nowrap">
当没有列出城市或州时,问题就出现了。我试图解释这一点,但我只是让它变得更糟。有没有什么方法可以清理,仍然可以解释信息丢失的可能性?谢谢。
没有城市的例子:
<td width="8%" nowrap="nowrap"></td>
<td width="22%" nowrap="nowrap"><strong>
MT
USA</strong></td>
<td width="10%" align="right" nowrap="nowrap">
没有城市/州的示例:(是的,有一个额外的换行符)
<td width="8%" nowrap="nowrap"></td>
<td width="22%" nowrap="nowrap"><strong>
USA</strong></td>
<td width="10%" align="right" nowrap="nowrap">
感谢您提供的任何帮助。
答案 0 :(得分:1)
如果您有专业版,可以执行以下操作:
Description: Data
Before: <td width="22%" nowrap="nowrap"><strong>
After: </strong>
Format: (([\w \-]+),)? ?([A-Z]{2})?[\r\n](USA|canada)\s*
Replace: \2##\3##\4
Separator: ##
Labels: City,State,Country
如果您使用的是轻型版本,则必须分三行进行:
Description: City
Before: <td width="22%" nowrap="nowrap"><strong>
After: ,
Format: [^<>]+
Description: State
Before: /<td width="22%" nowrap="nowrap"><strong>[\r\n]([^<>\r\n ]+,)?/
After: /[\r\n]/
Format: [A-Z]{2}
Description: Country
Before:
After: </strong></td>
Format: (USA|canada)
答案 1 :(得分:0)
TXR文本抓取,数据修改语言:
@(collect)
<td width="8%" nowrap="nowrap"></td>
<td width="22%" nowrap="nowrap"><strong>
@ (cases)
@city, @state
@ (or)
@ (bind (city state) ("n/a" "n/a"))
@ (or)
@state
@ (bind city "n/a")
@ (end)
@country</strong></td>
<td width="10%" align="right" nowrap="nowrap">
@(end)
@(output)
CITY STATE COUNTRY
@ (repeat)
@{city 10} @{state 11} @country
@ (end)
@(end)
文件city.html
包含连接在一起的树案例。运行:
$ txr city.txr city.html
CITY STATE COUNTRY
BILLINGS MT USA
n/a MT USA
n/a n/a USA
TXR HTML抓取的另一个例子:Extract text from HTML Table