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封电子邮件(或者页面范围相同)