2015-05-25 108 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” 参数值获得另一页。