Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在给定页面范围内弹出数据抓取窗口_Python_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 在给定页面范围内弹出数据抓取窗口

Python 在给定页面范围内弹出数据抓取窗口,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我有一个代码来解析弹出式信息(电子邮件),但我无法进入每一页。只差一页。那么我怎样才能在这段代码中添加页面范围呢 import re import requests from bs4 import BeautifulSoup base_url = 'https://tenders.procurement.gov.ge/public/?lang=en' url = 'https://tenders.procurement.gov.ge/public/library/controller.php

我有一个代码来解析弹出式信息(电子邮件),但我无法进入每一页。只差一页。那么我怎样才能在这段代码中添加页面范围呢

import re
import requests
from bs4 import BeautifulSoup

base_url = 'https://tenders.procurement.gov.ge/public/?lang=en'

url = 'https://tenders.procurement.gov.ge/public/library/controller.php?action=org_list'

profile_url = 'https://tenders.procurement.gov.ge/public/library/controller.php?action=profile&org_id='

num = re.compile(r'(\d+)')

with requests.session() as s:
    
    # load cookies:
    s.get(base_url)
    
    soup = BeautifulSoup(s.get(url).content, 'html.parser')
    
    for tr in soup.select('tr[onclick]'):
        n = num.search(tr['onclick']).group(1)
        soup2 = BeautifulSoup(s.get(profile_url + n).content, 'html.parser')
        email = soup2.select_one('td:contains("E-Mail") + td')
        print(email.text)
这个代码是由Andrej Keseley提供的,非常感谢他


那么,为了在给定范围内刮取页面,此代码将添加什么内容?

您可以尝试此代码来加载下一个页面:

import re
import requests
from bs4 import BeautifulSoup

base_url = 'https://tenders.procurement.gov.ge/public/?lang=en'
url = 'https://tenders.procurement.gov.ge/public/library/controller.php?action=org_list'
profile_url = 'https://tenders.procurement.gov.ge/public/library/controller.php?action=profile&org_id='
next_url = 'https://tenders.procurement.gov.ge/public/library/controller.php?action=org_list&search_org_type=0&page=next&blacklisted=0'

num = re.compile(r'(\d+)')

with requests.session() as s:
    
    # load cookies:
    s.get(base_url)
    
    soup = BeautifulSoup(s.get(url).content, 'html.parser')

    while True:

        if not soup.select('tr[onclick]'):
            break

        for tr in soup.select('tr[onclick]'):
            n = num.search(tr['onclick']).group(1)
            soup2 = BeautifulSoup(s.get(profile_url + n).content, 'html.parser')
            email = soup2.select_one('td:contains("E-Mail") + td')
            print(email.text)

        soup = BeautifulSoup(s.get(next_url).content, 'html.parser')

谢谢Andrej,您的代码将一如既往地工作!;)但是在大约9000封电子邮件之后,我收到了一个错误,那么我如何添加页面范围的任何变量呢?例如,我需要从9000封电子邮件到12000封电子邮件(或者页面范围相同)

回溯(最近一次呼叫最后一次): 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urllib3\connection.py”,第141行,位于康涅狄格州新 (self.host、self.port)、self.timeout、**额外功率) 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urllib3\util\connection.py”,第83行,位于创建\u连接中 提出错误 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urllib3\util\connection.py”,第73行,位于创建\u连接中 sock.connect(sa) TimeoutError:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应

在处理上述异常期间,发生了另一个异常:

回溯(最近一次呼叫最后一次): 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urlib3\connectionpool.py”,第600行,在urlopen中 分块=分块) 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urllib3\connectionpool.py”,第345行,在请求中 自我验证连接(连接) 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urllib3\connectionpool.py”,第844行,位于“验证连接” 连接 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urllib3\connection.py”,第284行,在connect中 conn=自我。_new_conn() 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urllib3\connection.py”,第150行,位于康涅狄格州新 self,“无法建立新连接:%s”%e) urllib3.exceptions.NewConnectionError::未能建立新连接:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机未能响应而建立的连接失败

在处理上述异常期间,发生了另一个异常:

回溯(最近一次呼叫最后一次): 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\requests\adapters.py”,第440行,在send中 超时=超时 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urlib3\connectionpool.py”,第649行,在urlopen中 _stacktrace=sys.exc_info()[2]) 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\urllib3\util\retry.py”,第388行,增量 引发MaxRetryError(_池、url、错误或响应错误(原因)) urllib3.exceptions.MaxRetryError:HTTPSConnectionPool(host='tenders.procurement.gov.ge',port=443):url:/public/library/controller.php?action=profile&org_id=67358超过了最大重试次数(由NewConnectionError引起)(':未能建立新连接:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应”)

在处理上述异常期间,发生了另一个异常:

回溯(最近一次呼叫最后一次): 文件“C:/Users/Dell/PycharmProjects/Scrap/main.py”,第25行,在 soup2=BeautifulSoup(s.get(profile\u url+n).content'html.parser') get中的文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\requests\sessions.py”,第536行 返回self.request('GET',url,**kwargs) 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\requests\sessions.py”,请求中第523行 resp=自我发送(准备,**发送) 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\requests\sessions.py”,第643行,在send中 r=适配器.send(请求,**kwargs) 文件“C:\Users\Dell\PycharmProjects\Scrap\venv\lib\site packages\requests\adapters.py”,第504行,在send中 raise ConnectionError(e,请求=请求)
requests.exceptions.ConnectionError:HTTPSConnectionPool(host='tenders.procurement.gov.ge',port=443):url:/public/library/controller.php?action=profile&org_id=67358超过了最大重试次数(由NewConnectionError引起)(':未能建立新连接:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应。)

其他页面的url是什么样子的?谢谢Andrej,您的代码一如既往地工作!;)但是在大约9000封电子邮件之后,我收到了一个错误,那么我如何添加页面范围的任何变量呢?例如,我需要从9000封电子邮件到12000封电子邮件(或者页面范围相同)