2017-03-02 83 views
0

你好再次同胞堆棧。簡短的描述..我網站上使用Python從汽車論壇中抓取一些數據並將所有數據保存到CSV文件中。在其他一些stackoverflow成員的幫助下,儘可能的挖掘所有頁面的特定主題,收集每篇文章的日期,標題和鏈接。 (對於每個發現的鏈接,python都會爲它創建一個新的湯,通過所有的帖子進行刮擦,然後返回到前一個鏈接)。我也有一個單獨的腳本。Web刮每個論壇帖子(Python,Beautifulsoup)

真的很感謝任何其他提示或建議,因爲這是我第一次使用python,我認爲這可能是我的嵌套循環邏輯搞砸了,但通過多次檢查似乎是對的。

繼承人的代碼片段:

 link += (div.get('href')) 
     savedData += "\n" + title + ", " + link 
     tempSoup = make_soup('http://www.automotiveforums.com/vbulletin/' + link) 
     while tempNumber < 3: 
      for tempRow in tempSoup.find_all(id=re.compile("^td_post_")): 
       for tempNext in tempSoup.find_all(title=re.compile("^Next Page -")): 
        tempNextPage = "" 
        tempNextPage += (tempNext.get('href')) 
       post = "" 
       post += tempRow.get_text(strip=True) 
       postData += post + "\n" 
      tempNumber += 1 
      tempNewUrl = "http://www.automotiveforums.com/vbulletin/" + tempNextPage 
      tempSoup = make_soup(tempNewUrl) 
      print(tempNewUrl) 
    tempNumber = 1 
    number += 1 
    print(number) 
    newUrl = "http://www.automotiveforums.com/vbulletin/" + nextPage 
    soup = make_soup(newUrl) 

我的主要問題與它到目前爲止是tempSoup = make_soup('http://www.automotiveforums.com/vbulletin/' + link) 似乎並沒有創建一個新的湯它做刮論壇話題的所有帖子後。

這是我得到的輸出:

http://www.automotiveforums.com/vbulletin/showthread.php?s=6a2caa2b46531be10e8b1c4acb848776&t=1139532&page=2 
    http://www.automotiveforums.com/vbulletin/showthread.php?s=6a2caa2b46531be10e8b1c4acb848776&t=1139532&page=3 
    1 

所以它似乎找到了新頁面的正確鏈接和刮他們,但是明年itteration它打印新的日期和完全相同的網頁。還有一個怪異的10-12秒延遲後,最後一個鏈接打印,然後它跳到打印數字1,然後擊出所有新的日期..

但是去下一個論壇線程鏈接後,它每次都會抓取相同的確切數據。

對不起,如果看起來很雜亂,這是一個側面項目,我第一次嘗試做一些有用的事情,所以我很新,在此,任何建議或提示將不勝感激。我並沒有要求你爲我解決代碼,即使我可能錯誤的邏輯的一些指針,將不勝感激!

親切的問候,感謝您閱讀這麼煩人的帖子!

編輯:我剪了大部分職位/代碼片段的,因爲我相信人們的生活越來越不堪重負。剛剛離開了我正在努力的基本位。任何幫助將非常感激!

回答

1

所以花了一點點時間後,我設法幾乎破解它。現在,python發現每一個線程,並在論壇上鍊接,然後進入每個鏈接,讀取所有頁面,並繼續下一個鏈接。

這是它的固定代碼,如果任何人將使用它。

link += (div.get('href')) 
    savedData += "\n" + title + ", " + link 
    soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + link) 
    while tempNumber < 4: 
     for postScrape in soup3.find_all(id=re.compile("^td_post_")): 
      post = "" 
      post += postScrape.get_text(strip=True) 
      postData += post + "\n" 
      print(post) 
     for tempNext in soup3.find_all(title=re.compile("^Next Page -")): 
      tempNextPage = "" 
      tempNextPage += (tempNext.get('href')) 
      print(tempNextPage) 
     soup3 = "" 
     soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + tempNextPage) 
     tempNumber += 1 
    tempNumber = 1 
number += 1 
print(number) 
newUrl = "http://www.automotiveforums.com/vbulletin/" + nextPage 
soup = make_soup(newUrl) 

我所要做的就是將2個嵌套在一起的循環放入自己的循環中。仍然不是一個完美的解決方案,但嘿,它幾乎可以工作。

非工作位:提供的鏈接的前2個線程有多個帖子頁面。以下10多個線程不要。我找不到一種方法來檢查循環外部的值,看看它是否爲空。因爲如果它沒有找到下一個頁面元素/ href,它只會使用最後一個。但是如果我在每次運行後重置該值,它不會再挖掘每個頁面= l一個解決方案剛剛創建了另一個問題:D。