2015-05-25 134 views
1

我想要使用python請求和beautifulsoup做scraising。 基本上我爬行亞馬遜網頁。 我可以在沒有任何問題的情況下抓取第一頁。蟒蛇刮與請求和beautifulsoup

r = requests.get("http://www.amazon.in/gp/bestsellers/books/ref=nav_shopall_books_bestsellers") 
#do some thing 

但是當我嘗試在URL中

r = requests.get("http://www.amazon.in/gp/bestsellers/books/ref=nav_shopall_books_bestsellers#2") 

以「#2」抓取第2頁我看到[R仍然有相當於1頁的值相同的值。

r = requests.get("http://www.amazon.in/gp/bestsellers/books/ref=nav_shopall_books_bestsellers") 

不知道是#2在向第二頁發出請求時造成麻煩。 我也谷歌有關的問題,但我找不到修復。 什麼是使用#values向網址發送請求的正確方式。如何解決這個問題。請指教。

回答

0

您需要請求描述分頁的錨標記的href屬性中的url。它位於頁面的底部。如果我檢查頁面在谷歌瀏覽器開發者控制檯我發現第一頁url是這樣的:

http://www.amazon.in/gp/bestsellers/books/ref=zg_bs_books_pg_1?ie=UTF8&pg=1 

,第二頁的URL是這樣的:

http://www.amazon.in/gp/bestsellers/books/ref=zg_bs_books_pg_2?ie=UTF8&pg=2 

a標籤的第二頁是像這樣:

<a page="2" ajaxUrl="http://www.amazon.in/gp/bestsellers/books/ref=zg_bs_books_pg_2?ie=UTF8&pg=2&ajax=1" href="http://www.amazon.in/gp/bestsellers/books/ref=zg_bs_books_pg_2?ie=UTF8&pg=2">21-40</a> 

所以你需要改變請求的URL。

1

「#2」是fragment identifier,它在服務器端不可見。您獲得的Html內容打開「http://someurl.com/page#123」與「http://someurl.com/page」的內容相同。

在瀏覽器中,您會看到第二個頁面,因爲頁面的JavaScript看到片段標識符,創建一個Ajax請求並向頁面中注入新內容。你應該find Ajax請求的URL,並使用它:

enter image description here

貌似我們的網址是:

http://www.amazon.in/gp/bestsellers/books/ref=zg_bs_books_pg_2?ie=UTF8&pg=2&aj

輕鬆,我們可以理解,我們需要的是改變 「PG」 參數值獲得另一頁。