使用 python 从网站上抓取 excel,并隐藏 _doPostBack 链接 url

2024-02-18

在过去的几天里,我试图废弃以下网站(链接粘贴在下面),该网站在表格中提供了一些 Excel 和 pdf。我能够成功地为主页做到这一点。这些 excel/pdf 总共有 59 页需要废弃。到目前为止,在我见过的大多数网站中,网站 URL 中都有一个可用的查询参数,当您从一个页面移动到另一页面时,该参数会发生变化。在本例中,我们有一个 _doPostBack 函数,可能是因为该函数在您访问的每个页面上的 URL 都保持相同。我查看了多个解决方案和帖子,建议查看以下参数post调用并使用它们,但我无法理解中提供的参数post打电话(这是我第一次抓取网站)。

有人可以建议一些资源来帮助我编写一段代码,帮助我使用 python 从一个页面移动到另一个页面。详情如下所示:

网站链接-http://accord.fairfactories.org/ffcweb/Web/ManageSuppliers/InspectionReportsEnglish.aspx http://accord.fairfactories.org/ffcweb/Web/ManageSuppliers/InspectionReportsEnglish.aspx

我当前的代码从主页提取 CAP excel 表(这工作完美,仅供参考)

from urllib.request import urlopen
from urllib.request import urlretrieve
from bs4 import BeautifulSoup
import re
import urllib

Base = "http://accord.fairfactories.org/ffcweb/Web"
html = urlopen("http://accord.fairfactories.org/ffcweb/Web/ManageSuppliers/InspectionReportsEnglish.aspx")
bs = BeautifulSoup(html)
name = bs.findAll("td", {"class":"column_style_right column_style_left"})
i = 1
for link in bs.findAll("a", {"id":re.compile("CAP(?!\w)")}):
    if 'href' in link.attrs:
        name = str(i)+".xlsx"
        a = link.attrs['href']
        b = a.strip("..")
        c = Base+b
        urlretrieve(c, name)
        i = i+1

如果我在提供信息时遗漏了任何内容,请告诉我,并且请不要评价我 - 否则我将无法进一步询问任何问题


对于 aspx 网站,您需要寻找类似的内容__EVENTTARGET, __EVENTVALIDATION等等..并在每个请求中发布这些参数,这将获取所有页面并使用requests http://docs.python-requests.org/en/master/ with bs4:

import requests
from bs4 import BeautifulSoup
from urlparse import urljoin # python 3 use from urllib.parse import urljoin   



# All the keys need values set bar __EVENTTARGET, that stays the same.
data = {
    "__EVENTTARGET": "gvFlex",
    "__VIEWSTATE": "",
    "__VIEWSTATEGENERATOR": "",
    "__VIEWSTATEENCRYPTED": "",
    "__EVENTVALIDATION": ""}


def validate(soup, data):
    for k in data:
        # update post values in data.
        if k != "__EVENTTARGET":
            data[k] = soup.select_one("#{}".format(k))["value"]


def get_all_excel():
    base = "http://accord.fairfactories.org/ffcweb/Web"
    url = "http://accord.fairfactories.org/ffcweb/Web/ManageSuppliers/InspectionReportsEnglish.aspx"
    with requests.Session() as s:
        # Add a user agent for each subsequent request.
        s.headers.update({"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"})
        r = s.get(url)
        bs = BeautifulSoup(r.content, "lxml")
        # get links from initial page.
        for xcl in bs.select("a[id*=CAP]"):
            yield urljoin(base, xcl["href"])
        # need to re-validate the post data in our dict for each request.
        validate(bs, data)
        last = bs.select_one("a[href*=Page$Last]")
        i = 2
        # keep going until the last page button is not visible
        while last:
            # Increase the counter to set the target to the next page
            data["__EVENTARGUMENT"] = "Page${}".format(i)
            r = s.post(url, data=data)
            bs = BeautifulSoup(r.content, "lxml")
            for xcl in bs.select("a[id*=CAP]"):
                yield urljoin(base, xcl["href"])
            last = bs.select_one("a[href*=Page$Last]")
            # again re-validate for next request
            validate(bs, data)
            i += 1


for x in (get_all_excel()):
    print(x)

如果我们在前三页运行它,你可以看到我们得到了你想要的数据:

http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9965
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9552
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10650
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11969
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10086
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10905
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10840
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9229
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11310
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9178
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9614
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9734
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10063
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10871
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9468
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9799
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9278
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=12252
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9342
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9966
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11595
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9652
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10271
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10365
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10087
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9967
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11740
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=12375
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11643
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10952
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=12013
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9810
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10953
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10038
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9664
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=12256
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9262
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9210
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9968
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9811
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11610
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9455
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11899
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10273
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9766
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9969
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10088
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10366
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9393
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9813
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11795
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9814
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11273
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=12187
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10954
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9556
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11709
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9676
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10251
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10602
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10089
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9908
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10358
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9469
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11333
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9238
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9816
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9817
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10736
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10622
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9394
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9818
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=10592
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=9395
http://accord.fairfactories.org/Utilities/DownloadFile.aspx?id=11271
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python 从网站上抓取 excel,并隐藏 _doPostBack 链接 url 的相关文章

随机推荐

  • 如何保持多个虚拟树视图节点的检查状态同步?

    我的树有 2 层节点 它是联系人列表风格树 我的问题是 我想检查所有 联系人类别 中的每个联系人 这是我的联系人列表现在的屏幕截图 是的 我有权发布它 如你所见 托德 赫希已在类别中选中测试类别 但不在所有联系人 我想要实现的目标是让联系人
  • Reflection.Emit 抛出 BadImageFormatException

    我试图在运行时生成一个新的类 对象 看完之后如何使用 PropertyBuilder 创建私有属性 https stackoverflow com questions 33674541 how to create a private pro
  • azure 函数的身份验证令牌缓存

    我们使用身份服务器为我们使用的第三方服务颁发令牌 每个令牌的 TTL 为 1 小时 想知道从天蓝色函数使用此令牌时缓存此令牌的最佳实践是什么 我知道该函数应该是无状态的 但在每个函数运行中请求新令牌是没有意义的 谢谢 这里有一些选项 按努力
  • Nodejs Connect/Express 会话如何管理内存

    我一直在阅读一些关于 Connect 和 Express 的源代码 了解如何管理会话 我仍在学习会话的基础知识 但我不明白内存是如何处理的 我知道服务器将会话数据保存在内存中并使用会话 ID 来访问数据 服务器发送保存 id 的 cooki
  • 使用 webpack-dev-server 监听客户端的热更新事件?

    这是一个有点边缘的情况 但了解一下会很有帮助 当使用 webpack dev server 开发扩展以使扩展代码保持最新时 监听 webpackHotUpdate 会很有用 带有内容脚本的 Chrome 扩展通常有两个方面 背景 注入的内容
  • 如何将我的应用程序设置为默认短信应用程序?

    我正在关注本教程 http android developers blogspot com 2013 10 getting your sms apps ready for kitkat html将我的应用程序设置为默认短信应用程序 但由于某
  • 如何隐藏/禁用admob广告视图?

    我通过 view gone 隐藏 admob adview adView setClickable false adView clearFocus adView setEnabled false adView setFilterTouche
  • 带有 enctype = "multipart/form-data" 的表单发布导致参数无法传递

    在 ASP NET MVC 3 Razor 项目中 我尝试上传图片 视图的相关部分 using Html BeginForm new enctype multipart form data
  • Javax ImageIO IIOException 显然没有原因

    大家好 我有一个 Java 问题 对于我的高级研究课程 我已经基本完成 但我只需要分析我生成的图像中的一些数据 我不想将其标记为家庭作业 因为它不是任何必需作业的一部分 这是我自己想出的来收集结果的东西 我编写了一个程序来逐像素比较两个图像
  • 全新安装后如何登录并验证 Postgresql?

    在 mint ubuntu 上新安装了 postgres 8 4 如何为 postgres 创建用户并使用 psql 登录 当我输入 psql 时 它只是告诉我 psql FATAL Ident authentication failed
  • 如何动态添加swift字典中的值

    我在我的 swift 类中声明了一个字典 如下所示 var profileDetail Dictionary
  • 更新到 IntelliJ 2017.1 导致 JAVA_TOOL_OPTIONS 打印

    今天早上 我更新到 IntelliJ IDEA 2017 1 当我运行任何测试 甚至运行我制作的 hello world 项目时 控制台都会打印一条消息 说明Picked up JAVA TOOL OPTIONS agentpath C w
  • Yii 和 cron 作业

    我创建了一个需要每月运行的 Yii 命令 如果我转到受保护的文件夹并手动运行命令 protected yiic ganadores 效果很好 我尝试将以下命令行添加到etc cron hourly and etc crontab没有成功 u
  • “针对接口而非对象进行编码”的 Python 版本是什么?

    受到一个很棒的问题 以及一堆很棒的答案 的启发here https stackoverflow com questions 4456424 what do programmers mean when they say code agains
  • 用 Java 劫持音频?

    我一直在尝试修改一些发现的代码在本页底部 http www java tips org java se tips javax sound capturing audio with java sound api html为了用Java劫持系统
  • 我可以在 Java Swing 中使用 CSS 吗?

    有什么方法可以在使用 Java Swing 的应用程序中重用我的 CSS 吗 Java swing 通常不是为了将其控件与其表示形式分离而构建的 但是有一个名为Jaxx http today java net pub a today 200
  • Matplotlib 散点图和彩色图的问题

    我正在开发一个项目 该项目涉及将颜色图应用于 matplotlib 中生成的散点图 我的代码按预期工作 除非生成的散点图恰好有四个点 下面的代码对此进行了说明 import numpy as np import matplotlib pyp
  • 使用 StageWebView.loadString() 在 AIR for iOS 上显示 Google 地图

    我正在尝试使用StageWebView显示使用 Javascript API 生成的 Google Maps 地图 有什么原因导致它无法在 iOS 上呈现吗 它适用于 Android 和 AIR 模拟器 但不适用于 iOS 设备 我也可以查
  • 服务调用时出现 WCF 超时异常

    我有一个 WCF 服务 实时出现以下错误 Event code 3005 Event message An unhandled exception has occurred Event time 19 06 2012 10 39 09 Ev
  • 使用 python 从网站上抓取 excel,并隐藏 _doPostBack 链接 url

    在过去的几天里 我试图废弃以下网站 链接粘贴在下面 该网站在表格中提供了一些 Excel 和 pdf 我能够成功地为主页做到这一点 这些 excel pdf 总共有 59 页需要废弃 到目前为止 在我见过的大多数网站中 网站 URL 中都有