2016-12-05 61 views
0

對不起,如果這是一個愚蠢的問題。通過腳本插入div的網頁抓取

我想在python中使用Beautifulsoup和urllib2來查看一個url並提取所有div與一個特定的類。但是,即使我在chrome的開發人員工具中「檢查元素」時可以看到div,結果始終爲空。

我看了看頁面的源代碼,那些div並不在那裏,這意味着它們是由腳本插入的。所以我的問題是我如何使用Beautifulsoup來查找這些div(使用他們的類名)?我想最終閱讀並遵循這些div下的hrefs。

謝謝。

[編輯] 我目前正在在H &中號網站:http://www.hm.com/sg/products/ladies和我有興趣得到所有帶班「產品列表項」的div

+0

你可以發佈您嘗試刮的URL,以檢查它是否使用JavaScript – Wonka

回答

0

嘗試使用硒運行JavaScript的

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("http://www.python.org") 
html = driver.page_source 
0

檢查此鏈接enter link description here

你可以通過改變所有的信息鏈接,這個鏈接中可以找到chrome開發工具>網絡

0

你之所以沒有從這個具體的網址得到什麼,只是因爲,你需要的信息不存在。因此,首先讓我解釋一下如何在瀏覽器中加載該頁面:當您請求該頁面時(http://www.hm.com/sg/products/ladies),文本內容將在第一階段返回(這是您從你的urllib2請求),然後瀏覽器開始讀取/解析內容,基本上它告訴瀏覽器在哪裏找到它需要呈現整個頁面的所有信息(例如,CSS來控制佈局,額外的JavaScript/URL /頁面來填充特定區域等等),並且瀏覽器在場景後面全都是。當您在Chrome中「檢查元素」時,頁面已經完全加載,並且您需要的信息不在原始網址中,因此您需要找出哪個網址用於填充這些區域,然後轉到該特定網址。

所以現在我們需要找出幕後發生的事情,並且需要一個工具來捕獲頁面加載時的所有流量(我會推薦fiddler)。

traffic captured by fiddler

正如你所看到的,當你在瀏覽器中打開該頁面很多事情發生了!(而這只是整個頁面加載過程的一部分),那麼由受過教育的猜測,這些信息需要應在這三個「api.hm.com」請求中的一箇中,最好的部分是他們已經成爲JSON格式化的,這意味着您甚至可能不會爲BeautifulSoup而煩惱,內置的json模塊可以完成這項工作!

好吧,現在是什麼?使用urllib2來模擬這些請求並得到你想要的。

P.S. requests是這類工作的好工具,你可以得到它here

0

試試這個:

from bs4 import BeautifulSoup 
import urllib2 
page = urllib2.urlopen("http://www.hm.com/sg/products/ladies") 

soup = BeautifulSoup(page.read(),'lxml') 

scrapdiv = open('scrapdiv.txt','w') 

product_lists = soup.findAll("div",{"class":"o-product-list"}) 
print product_lists 
for product_list in product_lists: 
    print product_list 
    scrapdiv.write(str(product_list)) 
    scrapdiv.write("\n\n") 
scrapdiv.close()