html 有段循环列表
<tr>
<td class="xinbz" height="30"><input value="856252" name="xzid" type="checkbox"> <a href="856252" title="域名:medytL.com" target="_blank">aaa.com</a></td>
<td>6</td>
<td align="left" ><font color='#0000ff'>企业</font></td>
<td>
企业</td>
<td align="center" ><a href="/?/130000" target='_blank' title="查看此卖家域名商铺">ID:130000</a></td>
<td align="left" >2017-12-2</td>
<td>111元</td>
<td align="center"><a href="856252" target="_blank" title="进入域名: medytL.com ,购买页面"><img src="xbt.jpg" ></a></td>
</tr>
<tr>
<td class="xinbz" height="30"><input value="856252" name="xzid" type="checkbox"> <a href="856252" title="域名:medytL.com" target="_blank">bbb.com</a></td>
<td>6</td>
<td align="left" ><font color='#0000ff'>企业</font></td>
<td>
企业</td>
<td align="center" ><a href="/?/130000" target='_blank' title="查看此卖家域名商铺">ID:130000</a></td>
<td align="left" >2017-12-2</td>
<td>222元</td>
<td align="center"><a href="856252" target="_blank" title="进入域名: medytL.com ,购买页面"><img src="xbt.jpg" ></a></td>
</tr>
我这段代码只能获取到第一组数据
get_datas = re.findall(r'target="_blank">(.*)<\/a>(.|\n)*<td>(\d+)元</td>', html, re.M);
print get_datas;
[('uuupk.com', '\n', '111')]
我想获取当前页面所有匹配的,类似 [('aaa.com', '\n', '111'),('bbb.com', '\n', '222')]
findall 加了 re.M 还是获取不到多次,代码问题出现在了哪里呢? 先谢谢了
1
sola97 2017-02-13 02:47:39 +08:00 1
你这么写是贪婪匹配,中间你得加问号 (.|\n)*?
|
2
wddoer 2017-02-13 09:33:27 +08:00 1
为何不用 beautifulsoup 呢
|
3
IanPeverell 2017-02-13 09:41:12 +08:00 1
|
4
ipwx 2017-02-13 12:48:23 +08:00 1
把 re.M 改成 re.S
re.M == re.MULTILINE 含义是 ^ 和 $ 匹配每一行的开头结尾,而不是整个字符串开头结尾。 re.S == re.DOTALL 表示 . 能够匹配 \n 1L 和 3L 并非错误,但是不是标准做法。 2L 其实给出了相对更好的答案,解析网页还是上 BeautifulSoup 更好。 |
5
ipwx 2017-02-13 12:50:20 +08:00 1
好吧,审题不清。 1L 和 3L 的 .*? 还是必要的。加上 re.S 你就不用 (.|\n)*? 了。
|
6
Allianzcortex 2017-02-13 19:59:26 +08:00 via iPhone
.*+ 后面加一个 ? 表示匹配最少的结果~
|