python 爬虫 正则问题

<tr>
                                    <td>测试8</td>
                                    <td>
                                        
                                            
                                                不限制
                                            
                                            
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            3
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            
                                                300
                                            
                                        
                                    </td>
                                    <td>
                                        <a href="javascript:;" onclick="plan_edit('76261');">编辑</a>
                                    </td>
                                </tr>
                            
                                <tr>
                                    <td>测试7</td>
                                    <td>
                                        
                                            
                                                不限制
                                            
                                            
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            1
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            
                                                300
                                            
                                        
                                    </td>
                                    <td>
                                        <a href="javascript:;" onclick="plan_edit('76246');">编辑</a>
                                    </td>
                                </tr>
                            
                                <tr>
                                    <td>测试5</td>
                                    <td>
                                        
                                            
                                                不限制
                                            
                                            
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            1
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            
                                                300
                                            
                                        
                                    </td>
                                    <td>
                                        <a href="javascript:;" onclick="plan_edit('76181');">编辑</a>
                                    </td>
                                </tr>
                            
                                <tr>
                                    <td>测试4</td>
                                    <td>
                                        
                                            
                                                不限制
                                            
                                            
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            1
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            
                                                300
                                            
                                        
                                    </td>
                                    <td>
                                        <a href="javascript:;" onclick="plan_edit('76179');">编辑</a>
                                    </td>
                                </tr>
                            
                                <tr>
                                    <td>测试3</td>
                                    <td>
                                        
                                            
                                                不限制
                                            
                                            
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            0
                                        
                                    </td>
                                    <td>
                                        
                                            
                                            
                                                300
                                            
                                        
                                    </td>
                                    <td>
                                        <a href="javascript:;" onclick="plan_edit('76176');">编辑</a>
                                    </td>
                                </tr>
                                

我想匹配测试8 到测试3 我写的是这样的

 feeds_plan_campaign_name = re.findall('''<tr>[.\S\s]*<td>(.*?)</td>[.\S\s]*<td>[.\S\s]*</td>[.\S\s]*<td>[.\S\s]*</td>[.\S\s]*<td>[.\S\s]*</td>[.\S\s]*<td>[.\S\s]*</td>[.\S\s]*</tr>''',feeds_plan_page_data.text,re.S)
                                    print len(feeds_plan_campaign_name)
                                    for k in range(len(feeds_plan_campaign_name)):
                                        print "name1" + feeds_plan_campaign_name[k]
                                

打印的结果只有测试3 这是为啥呢?

阅读 3.2k
4 个回答

对于这种结构分明(带有html完整标签的内容), 我建议不要使用正则表达式regex, 更好的办法是使用Xpath, 如果你还不知道什么是Xpath, 请在w3school学习一下.

仅需体验三分钟, 你就会和我一样爱上这款工具.(逃)

如果你坚持要用正则, 我写了个, 真的很麻烦! 而且挺没有可移植性. 如下, 供参考:

'''
regex = re.compile("<tr>[\s]*<td>([\u4e00-\u9fa50-9]*)</td>[\s]*<td>[\s]*([\u4e00-\u9fa5]*)
[\s]*</td>[\s]*<td>[\s]*([0-9]*)[\s]*</td>[\s]*<td>[\s]*([0-9]*)")
'''
# (一行写不下, 所以用了''' ''',请拷贝测试时删去)

返回值就是你需要的一个列表(多维数组).

新手上路,请多包涵

佩服楼主的正则理解方式 <td>[.Ss]</td>[.Ss] 一堆重复不会括号扩起来吗
不想捕获的话用个非捕获括号(?:<td>[.Ss]</td>[.Ss])*

就你上面那个正则只有一个捕获括号,你还指望能返回啥呢

为何不尝试下beautifulsoup4呢(笑)

>>> from pyquery import PyQuery
>>> print([i.text for i in PyQuery(s)('tr > td:first')])
['测试8', '测试7', '测试5', '测试4', '测试3']
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题