我正在运行一个很差劲的项目,我想从响应中提取文本:
>>> response.xpath('/html/body/table[2]/tr/td/table/tr[2]').extract()
[u'<tr class="over"onclick="HM.set(\'bWFya2V0PT1nZW5lcmFsfHxzdD09MzB8fHN0cz09eyIxMCI6IlJlZ2lvbiIsIjIwIjoiTWlkZGxlIEVhc3QiLCIzMCI6IjRSVU5ORVIgNjcxMzYwIn18fGNhdGFsb2c9PTY3MTM2MHx8cmVjPT1CMw%3D%3D\');">\n<td>671360</td>\n<td>4RUNNER</td>\n<td>11/1995-11/2002</td>\n<td>KZN185,RZN18#,VZN18#</td>\n</tr>']
我需要提取:
bWFya2V0PT1nZW5lcmFsfHxzdD09MzB8fHN0cz09eyIxMCI6IlJlZ2lvbiIsIjIwIjoiTWlkZGxlIEVhc3QiLCIzMCI6IjRSVU5ORVIgNjcxMzYwIn18fGNhdGFsb2c9PTY3MTM2MHx8cmVjPT1CMw%3D%3D
我试着用:response.xpath('/html/body/table[2]/tr/td/table/tr[2]').re('[^HM.+D$]*')
,但结果是:
[u'<tr class="over" onclick="', u'', u'', u'', u"set('bWFya2V0PT1nZW5lcmFsf", u'', u'xzd', u'', u'09', u'', u'zB8f', u'', u'N0cz09eyIx', u'', u'CI6IlJlZ2lvbiIsIjIwIjoiTWlkZGxlIEVhc3QiLCIz', u'', u'CI6IjRSVU5ORVIgNjcx', u'', u'zYwIn18fGNhdGFsb2c9PTY3', u'', u'T', u'', u'2', u'', u'', u'x8cmVjPT1C', u'', u'w%3', u'', u'%3', u'', u'\');">\n <td>671360</td>\n <td>4RUNNER</td>\n <td>11/1995-11/2002</td>\n <td>KZN185,RZN18#,VZN18#</td>\n </tr>', u'']
可以使用以下表达式:
所以在你的情况下,它会转化为:
说明:
(?<=HM\.set\(')
与子字符串HM.set('
匹配的正向查找。你知道吗[^']+
求反字符类,以匹配所有非'
字符一次或多次。你知道吗但是,仅使用捕获组进行此操作会更有效。你知道吗
例如:
可能是:
表达式
[^HM.+D$]*
不起作用,因为[^]
是一个取反字符类,这意味着除[HM.+D$]
之外的所有字符都将匹配(这不是您想要的)。你知道吗或者,您可以始终检索
onclick
属性,然后从中解析值:相关问题 更多 >
编程相关推荐