【发布时间】:2020-04-17 21:05:04
【问题描述】:
我在 python 中创建了一个脚本,利用 post http 请求从网页获取搜索结果。要填充结果,需要单击按顺序显示的字段here。现在将出现一个新页面,this 是如何填充结果。
第一页有十个结果,下面的脚本可以完美解析结果。
我现在想做的是使用results 到达他们的inner page,以便从那里解析Sole Proprietorship Name (English)。
到目前为止,我已经尝试过:
import re
import requests
from bs4 import BeautifulSoup
url = "https://www.businessregistration.moc.gov.kh/cambodia-master/service/create.html?targetAppCode=cambodia-master&targetRegisterAppCode=cambodia-br-soleproprietorships&service=registerItemSearch"
payload = {
'QueryString': '0',
'SourceAppCode': 'cambodia-br-soleproprietorships',
'OriginalVersionIdentifier': '',
'_CBASYNCUPDATE_': 'true',
'_CBHTMLFRAG_': 'true',
'_CBNAME_': 'buttonPush'
}
with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
res = s.get(url)
target_url = res.url.split("&")[0].replace("view.", "update.")
node = re.findall(r"nodeW\d.+?-Advanced",res.text)[0].strip()
payload['_VIKEY_'] = re.findall(r"viewInstanceKey:'(.*?)',", res.text)[0].strip()
payload['_CBHTMLFRAGID_'] = re.findall(r"guid:(.*?),", res.text)[0].strip()
payload[node] = 'N'
payload['_CBNODE_'] = re.findall(r"Callback\('(.*?)','buttonPush", res.text)[2]
payload['_CBHTMLFRAGNODEID_'] = re.findall(r"AsyncWrapper(W\d.+?)'",res.text)[0].strip()
res = s.post(target_url,data=payload)
soup = BeautifulSoup(res.content, 'html.parser')
for item in soup.find_all("span", class_="appReceiveFocus")[3:]:
print(item.text)
如何使用请求从每个结果内页解析Name (English)?
【问题讨论】:
-
您链接的问题与我在这里提出的问题不同@αԋɱҽԃ αмєяιcαη。这是关于从不同深度刮取
name。谢谢。 -
我相信我之前已经问过你关于最终目标的问题,你确认你可以处理剩下的事情,但目前看到的是你正在从一个问题转移到另一个问题,这意味着你需要有人来继续为你写代码。
-
@asmitu 是否必须访问内页才能从那里刮取英文名称?你不能从
appReceiveFocus元素中刮取英文名称吗?所有的搜索结果似乎都在链接中加入了英文名称。 -
是的,我在创建这篇文章时注意到了这一点。问题是我也会解析该页面中的其他字段,因此有必要访问内页。
标签: python python-3.x web-scraping beautifulsoup python-requests