Python Scrape with requests and beautifulsoup

时间:2015-05-25 10:12:20

标签: python

我正在尝试使用python请求和beautifulsoup来刮除消费税。 基本上我正在爬亚马逊网页。 我能够毫无问题地抓取第一页。

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

但是当我尝试用"#2"抓取第二页时在网址

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

我看到r仍然具有相同的值,相当于1页的值。

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

在向第二页提出请求时,不知道是#2导致任何问题。 我也谷歌关于问题,但我找不到修复。 使用#values向url发出请求的正确方法是什么。如何解决这个问题。请指教。

2 个答案:

答案 0 :(得分:1)

“#2”是fragment identifier,它在服务器端不可见。您获得的Html内容,打开“http://someurl.com/page#123”与“http://someurl.com/page”的内容相同。

在浏览器中,您会看到第二页,因为页面的javascript会看到片段标识符,创建ajax请求并将新内容注入页面。您应该find ajax请求的网址并使用它:

enter image description here

看起来我们的网址是:

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

我们很容易理解我们所需要的就是改变“pg”param值来获取另一个页面。

答案 1 :(得分:0)

您需要在描述分页的锚标记的href属性中请求url。它位于页面底部。如果我在Google Chrome中的开发者控制台中检查页面,我会发现第一页url就像:

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

和第二页的网址是这样的:

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>

因此您需要更改请求网址。