抓取时无法修改我的脚本来分隔请求数

SIM卡

我已经在python中编写了一个脚本,Thread用于同时处理多个请求并更快地执行抓取过程。该脚本正在相应地完成它的工作。

简而言之,抓取工具的作用:它分析从着陆页到其主页(存储信息)的所有链接,happy hours然后featured special从那里进行抓取刮板将继续进行直到所有29页都被爬网为止。

由于可能有很多链接可以使用,因此我想限制请求的数量。但是,由于对此我没有太多的想法,因此无法找到任何理想的方式来修改现有脚本来达到目的。

任何帮助将不胜感激。

到目前为止,这是我的尝试:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import threading

url = "https://www.totalhappyhour.com/washington-dc-happy-hour/?page={}"

def get_info(link):
    for mlink in [link.format(page) for page in range(1,30)]:
        response = requests.get(mlink)
        soup = BeautifulSoup(response.text,"lxml")
        itemlinks = [urljoin(link,container.select_one("h2.name a").get("href")) for container in soup.select(".profile")]
        threads = []
        for ilink in itemlinks:
            thread = threading.Thread(target=fetch_info,args=(ilink,))
            thread.start()
            threads+=[thread]

        for thread in threads:
            thread.join()

def fetch_info(nlink):
    response = requests.get(nlink)
    soup = BeautifulSoup(response.text,"lxml")
    for container in soup.select(".specials"):
        try:
            hours = container.select_one("h3").text
        except Exception: hours = ""
        try:
            fspecial = ' '.join([item.text for item in container.select(".special")])
        except Exception: fspecial = ""
        print(f'{hours}---{fspecial}')

if __name__ == '__main__':
    get_info(url)
SIM卡

由于我刚开始使用多处理程序创建任何刮板,因此我希望拥有任何实际脚本,以便非常清楚地理解逻辑。脚本中使用的站点具有某种机器人保护机制。但是,我发现了一个非常相似的网页,可以在其中进行多重处理

import requests
from multiprocessing import Pool
from urllib.parse import urljoin
from bs4 import BeautifulSoup

url = "http://srar.com/roster/index.php?agent_search={}"

def get_links(link):
    completelinks = []
    for ilink in [chr(i) for i in range(ord('a'),ord('d')+1)]:
        res = requests.get(link.format(ilink))  
        soup = BeautifulSoup(res.text,'lxml')
        for items in soup.select("table.border tr"):
            if not items.select("td a[href^='index.php?agent']"):continue
            data = [urljoin(link,item.get("href")) for item in items.select("td a[href^='index.php?agent']")]
            completelinks.extend(data)
    return completelinks

def get_info(nlink):
    req = requests.get(nlink)
    sauce = BeautifulSoup(req.text,"lxml")
    for tr in sauce.select("table[style$='1px;'] tr"):
        table = [td.get_text(strip=True) for td in tr.select("td")]
        print(table)

if __name__ == '__main__':
    allurls = get_links(url)
    with Pool(10) as p:  ##this is the number responsible for limiting the number of requests
        p.map(get_info,allurls)
        p.join()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

抓取某些网址时无法停止我的脚本

验证失败时,beforeMarshal不会修改请求数据

无法限制我的脚本来解析网页中的特定部分

CharArray as Field修改请求数据输入

无法使用请求从脚本标签中抓取不同专辑的链接?

如何在单击按钮时使用客户端脚本来修改文本框

NodeJS脚本来修改JSON文件

抓取时我无法获取ID(python)

无法使用根据请求构建的某些脚本来跟踪网站中的用户

如何抓取和实现GET请求数据

我无法使用我的运动脚本来实现统一

抓取时收到请求?

当我在颤振中保持活动小部件时如何再次请求数据?

从http请求数据时出错

PHP-无法执行我的BASH脚本来启动C ++二进制文件

如何通过修改我糟糕的批处理编程脚本来制作带有日期和时间的备份文件?

jqGrid在请求数据之前修改发布数据

如何编写JavaScript脚本来修改此CSS文件?

可点击的div修改...需要脚本来查找特定的类

无法修改HTML时,如何更改脚本顺序?

限制bash脚本发出的cURL请求数量的速率

尝试使用Java脚本从FLASK API请求数据(POST)

当我没有超过每日免费请求数时,为什么仍然出现错误MAX_ELEMENTS_EXCEEDED?

当有脚本结果时,如何通过请求进行网络抓取,Bs4?

我无法获得客户端脚本来连接到本地服务器,TCP连接永远不会发生

在Python抓取脚本中请求多个网址

无法使用发布请求让我的脚本填充结果

如何编写脚本来“监听”电池状态并在电池电量高于60%或低于40%时提醒我?

我应该如何使用我的脚本来显示警报?