如何把这个网站

2024-05-19 03:42:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里有一个网站

BSE SmallCap

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

Showing 1 - 100 of 528 << Previous | Next >>

是看到了。怎么了我可以访问链接吗

Next >>

在程序化的。这个链接被视为基本url+“#”(http://money.rediff.com/index/bse/bsesmallcap#). 如何保存所有1-528公司详细信息(单独保存网页:1-100,101-200等)。 有没有针对这类任务的特殊定制程序。在


Tags: ofhttpurl网站链接编程方式公司
3条回答

使用^{}而不是{a3}来旋转jdotjdot's答案,我喜欢它作为遍历的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之类的东西,因为它实际上是javascript:

javascript:nextPage(document.paging.totalPages.value)

我使用Chrome的开发工具来查看它实际发出了什么请求,结果发现它只是一个简单的未经验证的POST请求。您可以使用以下内容获取所需的任何页面:

^{pr2}$

您所要做的就是更改'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

“每页”的完整链接是: http://money.rediff.com/indices/bse/bsesmallcap&cTab=12&sortBy=&sortDesc=&pageType=indices_wise&currentPageNo=1&RowPerPage=100&bTab=12

(我已经删除了totalPages方面,因为您需要自己刮取这部分内容)

一旦知道了页数(从抓取中获得),就可以增加currentPageNo,直到拥有所有行为止。在

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

相关问题 更多 >

    热门问题