我正在尝试使用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发出请求的正确方法是什么。如何解决这个问题。请指教。
答案 0 :(得分:1)
“#2”是fragment identifier,它在服务器端不可见。您获得的Html内容,打开“http://someurl.com/page#123”与“http://someurl.com/page”的内容相同。
在浏览器中,您会看到第二页,因为页面的javascript会看到片段标识符,创建ajax请求并将新内容注入页面。您应该find ajax请求的网址并使用它:
看起来我们的网址是:
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>
因此您需要更改请求网址。