抓取网页:从网页获取搜索结果 - javascript

我正在尝试使用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=…