Python 如何浏览这个网站

Python 如何浏览这个网站,python,ajax,web-scraping,Python,Ajax,Web Scraping,我在这里有一个网站 这里列出了大约100家公司。 如何使用Python(或C#)以编程方式保存接下来的100家公司。 在这一页的底部 显示528中的1-100> 已看到。我如何访问该链接 下一步>> 以编程方式。此链接被视为基本url+“#”(http://money.rediff.com/indices/bse/bsesmallcap#). 如何保存所有1-528公司详细信息(作为单独的网页:1-100101-200等)。 这类任务是否有专门的定制程序。你甚至不需要scrapy或类似的东西—

我在这里有一个网站

这里列出了大约100家公司。 如何使用Python(或C#)以编程方式保存接下来的100家公司。 在这一页的底部

显示528中的1-100>

已看到。我如何访问该链接

下一步>>

以编程方式。此链接被视为基本url+“#”(http://money.rediff.com/indices/bse/bsesmallcap#). 如何保存所有1-528公司详细信息(作为单独的网页:1-100101-200等)。
这类任务是否有专门的定制程序。

你甚至不需要scrapy或类似的东西——没有“下一步”链接,因为它实际上是javascript:

javascript:nextPage(document.paging.totalPages.value)
我使用Chrome的开发者工具查看它实际发出的请求,结果发现它只是一个简单的未经验证的POST请求。您可以通过以下内容获得所需的任何页面:

import requests
r = requests.post('http://money.rediff.com/indices/bse/bsesmallcap',
              data={'currentPageNo': 3, 'RowPerPage': 100})
print r.text
您所要做的就是更改
'currentPageNo'
参数以获得您要查找的页面。您可能还可以更改每页的行数,但我没有尝试过。更新:你不能;我试过了

在实际保存信息方面,您可以使用
BeautifulSoup
从每个请求中获取数据,并将其存储或保存。由于该表在每个页面上都有
'dataTable'
类,因此很容易找到它。因此,假设有6个页面,您最终会得到如下代码:

import requests
from bs4 import BeautifulSoup as BS
for page in range(1, 7):
    r = requests.post('http://money.rediff.com/indices/bse/bsesmallcap',
                      data={'currentPageNo': page, 'RowPerPage': 100})
    soup = BS(r.text)
    table = soup.find(class_='dataTable')
    # Add table information to whatever output you plan to use

你甚至不需要scrapy或类似的东西——因为“下一个”链接没有链接,因为它实际上是javascript:

javascript:nextPage(document.paging.totalPages.value)
我使用Chrome的开发者工具查看它实际发出的请求,结果发现它只是一个简单的未经验证的POST请求。您可以通过以下内容获得所需的任何页面:

import requests
r = requests.post('http://money.rediff.com/indices/bse/bsesmallcap',
              data={'currentPageNo': 3, 'RowPerPage': 100})
print r.text
您所要做的就是更改
'currentPageNo'
参数以获得您要查找的页面。您可能还可以更改每页的行数,但我没有尝试过。更新:你不能;我试过了

在实际保存信息方面,您可以使用
BeautifulSoup
从每个请求中获取数据,并将其存储或保存。由于该表在每个页面上都有
'dataTable'
类,因此很容易找到它。因此,假设有6个页面,您最终会得到如下代码:

import requests
from bs4 import BeautifulSoup as BS
for page in range(1, 7):
    r = requests.post('http://money.rediff.com/indices/bse/bsesmallcap',
                      data={'currentPageNo': page, 'RowPerPage': 100})
    soup = BS(r.text)
    table = soup.find(class_='dataTable')
    # Add table information to whatever output you plan to use
“每页”的完整链接为:

(我已经删除了totalPages方面,因为您需要自己清理这一部分)

一旦知道了页数(通过刮取),就可以增加
currentPageNo
,直到获得所有行

您可以增加RowsPerPage的数量,但似乎有200行的内部限制(即使您将其更改为500行)

指向“每页”的完整链接是:

(我已经删除了totalPages方面,因为您需要自己清理这一部分)

一旦知道了页数(通过刮取),就可以增加
currentPageNo
,直到获得所有行

您可以增加RowsPerPage的数量,但似乎有200行的内部限制(即使您将其更改为500行)

一个旋转回答,使用而不是,我喜欢它作为jQuery式的遍历表示法。默认情况下,它将使用
urllib
,或用于刮取

from pyquery import PyQuery as pq
for page in range(1, 3):
    # POST request
    d = pq(url="http://money.rediff.com/indices/bse/bsesmallcap",
           data={"currentPageNo": page, "RowPerPage": 50},
           method="post")
    # jQuery-esque notation for selecting elements
    d("table.dataTable").text()
一个旋转回答使用而不是,我喜欢它的jQuery风格的遍历符号。默认情况下,它将使用
urllib
,或用于刮取

from pyquery import PyQuery as pq
for page in range(1, 3):
    # POST request
    d = pq(url="http://money.rediff.com/indices/bse/bsesmallcap",
           data={"currentPageNo": page, "RowPerPage": 50},
           method="post")
    # jQuery-esque notation for selecting elements
    d("table.dataTable").text()

如果你在寻找一个好的答案,你可能想让你的问题更具体一些——这是谷歌绝对可以帮助解决的问题。另外,看看scrapy或Beautiful,如果你想找到一个好的答案,你可能想让你的问题更具体一些——这是谷歌绝对可以帮助解决的问题。另外,看看scrapy或BeautifulSoup,你是如何获得整个链接的?@Vinod是使用Google Chrome的开发者工具(网络选项卡)获得的?你是如何获得整个链接的?@Vinod是使用Google Chrome的开发者工具(网络选项卡)获得的试图安装Pyquery。它要求lxml。@Vinod您反对安装
lxml
?@beargle我反对安装
lxml
;在Windows上总是有问题。@jdotjdot我使用了非官方的二进制文件,没有任何问题。这两种解析解决方案都有效,我想这只是我的偏好:-)@beargle我可以将此表作为行列表获取。尝试安装Pyquery。它要求lxml。@Vinod您反对安装
lxml
?@beargle我反对安装
lxml
;在Windows上总是有问题。@jdotjdot我使用了非官方的二进制文件,没有任何问题。这两种解析解决方案都有效,我想这只是一个偏好问题:-)@beargle我可以将这个表作为行列表来获取吗。