我正在尝试使用python抓取网页。网页网址为:https://kollainkomster.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
javascript popupwindow之后的行如何工作? - javascript好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…
Javascript-Urls的奇怪字符串比较行为 - javascript最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com/…
使用C#执行JavaScript页面 - javascript我正在尝试使用C#抓取一个网站。在此过程中的某个时候,网站返回了我需要执行的JavaScript页面,以便它将生成一些参数,然后使用所生成的参数作为查询变量来发布请求。这是JavaScript文件https://jsfiddle.net/7aw5vr59/浏览器生成的结果文件如下所示:<imimxxxyyy id="ActiveX"…
Javascript-从当前网址中删除查询字符串 - javascript单击提交按钮后,我需要从网址中删除查询字符串值。我可以用jQuery做到这一点吗?当前网址:siteUrl/page.php?key=value 页面提交后:siteUrl/page.php 实际上,我已经从另一个带有查询字符串的页面着陆到当前页面。我需要在页面首次加载时查询字符串值以预填充一些详细信息。但是,一旦我提交了表格,我就需要删除查询字符串值。我已…
将值设置为无法与jQuery一起使用的隐藏字段 - javascript我有一个使用Visual Studio 2013创建的应用程序,但是在使用jQuery向隐藏字段分配值时遇到了一些问题。首先,我要为隐藏变量分配一个值,因为我无法直接访问.cs文件中标签的文本值,因此我必须将标签的值分配给隐藏的输入字段才能访问在.cs文件中。我希望这是有道理的。这是我在.aspx文件中的隐藏输入字段: <input type=…