鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Python/ python 爬蟲 正則問題

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]
                                

打印的結(jié)果只有測試3 這是為啥呢?

回答
編輯回答
陪她鬧

為何不嘗試下beautifulsoup4呢(笑)

2017年8月15日 21:02
編輯回答
瘋浪

佩服樓主的正則理解方式 <td>[.Ss]</td>[.Ss] 一堆重復(fù)不會括號擴(kuò)起來嗎
不想捕獲的話用個非捕獲括號(?:<td>[.Ss]</td>[.Ss])*

就你上面那個正則只有一個捕獲括號,你還指望能返回啥呢

2018年3月13日 04:15
編輯回答
愿如初

對于這種結(jié)構(gòu)分明(帶有html完整標(biāo)簽的內(nèi)容), 我建議不要使用正則表達(dá)式regex, 更好的辦法是使用Xpath, 如果你還不知道什么是Xpath, 請?jiān)?a rel="nofollow noreferrer">w3school學(xué)習(xí)一下.

僅需體驗(yàn)三分鐘, 你就會和我一樣愛上這款工具.(逃)

如果你堅(jiān)持要用正則, 我寫了個, 真的很麻煩! 而且挺沒有可移植性. 如下, 供參考:

'''
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]*)")
'''
# (一行寫不下, 所以用了''' ''',請拷貝測試時刪去)

返回值就是你需要的一個列表(多維數(shù)組).

2017年6月4日 23:30
編輯回答
陪她鬧
>>> from pyquery import PyQuery
>>> print([i.text for i in PyQuery(s)('tr > td:first')])
['測試8', '測試7', '測試5', '測試4', '測試3']
2018年5月2日 13:31