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 ![]() 你这么写是贪婪匹配,中间你得加问号 (.|\n)*? |
![]() | 2 wddoer 2017-02-13 09:33:27 +08:00 ![]() 为何不用 beautifulsoup 呢 |
![]() | 3 IanPeverell 2017-02-13 09:41:12 +08:00 ![]() |
![]() | 4 ipwx 2017-02-13 12:48:23 +08:00 ![]() 把 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 ![]() 好吧,审题不清。 1L 和 3L 的 .*? 还是必要的。加上 re.S 你就不用 (.|\n)*? 了。 |
![]() | 6 Allianzcortex 2017-02-13 19:59:26 +08:00 via iPhone .*+ 后面加一个 ? 表示匹配最少的结果~ |