javascript - 抓取网页:从网页中获取搜索结果
问题描述
我正在尝试使用 python 抓取网页。网页网址为:https ://kolllainkomster.se/postnummer/
该网页包含一个搜索栏:
<input type="text" name="cf-name" pattern="[0-9 ]+" value="" placeholder="25245" size="40">
我想提交一个输入。例如,这样的输入可以是:“17568”。输入通过按钮提交:
<input type="submit" name="cf-submitted" value="Sök">
提交输入后,我想从以下返回的信息中提取元素:snittlon:
<p class="postnrresultat resultat">Postnummer <strong>17568</strong> har <strong>
<span id="snittlon">550 628,00</span></strong> i snittinkomst och <strong>316</strong>
i placering.<script> if(isNaN("550628.0049")){document.getElementById("snittlon").innerHTML = "550628.0049"}
else {document.getElementById("snittlon").innerHTML = accounting.formatNumber(550628.0049, 2, " ", ",");}
</script></p>
我不确定如何实现这一目标。似乎使事情复杂化的一件事是在输入提交期间显示的 URL 保持不变。
到目前为止,这就是我所拥有的:
import requests
from lxml import html
r = requests.get('https://kollainkomster.se/postnummer/',
headers ={"user-agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:73.0) Gecko/20100101 Firefox/73.0'})
解决方案
与所有抓取任务一样,请注意这样做可能不合法。确保与站点提供商核实是否可以,并在您的脚本中使用适当的超时,以免过度打击站点提供商。
顺便说一句,请参阅下面的示例(您可能需要使用标头配置),了解如何获取信息(请注意,javascript 执行可能不是最安全的方式,编写自己的信息解析器可能是更好的选择):
import requests
from bs4 import BeautifulSoup
from quickjs import Function
def get_value(script_code):
f = Function(name="value_getter",
code=
"""
function value_getter(){
%s
}""" % (re.sub(r'accounting\.formatNumber\((?P<num>.*), 2, " ", ","\)',
r'"\g<1>"',
script_code.replace('document.getElementById("snittlon").innerHTML =',
'return')))
)
return f()
headers = {"user-agent": '[redacted: your user agent]'}
session = requests.Session()
session.get(r"https://kollainkomster.se/postnummer/", headers=headers)
r = session.post(r"https://kollainkomster.se/postnummer/",
headers=headers,
data={"cf-name": 17568,
"cf-submitted": "Sök"})
soup = BeautifulSoup(r.text)
income = get_value(soup.find(class_="postnrresultat resultat").find("script").text)
post_number, _, ranking = [x.text for x in
soup.find(class_="postnrresultat resultat").findAll("strong")]
print(income, post_number, ranking)
输出:
393568.4065 17568 1414
推荐阅读
- histogram - 在 grafana 上使用原始 mysql 数据创建直方图
- dspace - 我需要更新 DSpace 4.2 中给定集合的 dc.identifier.uri 元数据的内容
- ios - 滚动时,将重复第一次设置数据的 uitableview 单元格
- elasticsearch - 使用时间字段名称中的点在 grafana 中定义新弹性数据源的问题
- wordpress - 会话数据以错误的访问者结尾?这怎么可能?
- r - 主面板中的过滤器水平
- c++ - 尝试运行 C++ 应用程序时权限被拒绝
- javascript - React Native Carousel OnPress
- firebase - Show pins of a subcollection of firebase on map - Flutter
- css - 如何更改 hr 标签的长度?