Python Beautiful Soup抓取和解析

时间:2019-09-10 06:21:07

标签: javascript python-3.x web-scraping beautifulsoup

我正在尝试使用BeautifulSoup抓取一个Java脚本页面

bb2_addLoadEvent(function() {
    for ( i=0; i < document.forms.length; i++ ) {
        if (document.forms[i].method == 'post') {
            var myElement = document.createElement('input');
            myElement.setAttribute('type', 'hidden');
            myElement.name = 'bb2_screener_';
            myElement.value = '1568090530 122.44.202.205 122.44.202.205';
            document.forms[i].appendChild(myElement);
        }

我想获取“ myElement.value”的值,但是我不熟悉该方法(如果使用BeautifulSoup甚至可以做到)

我尝试过:

soup = BeautifulSoup(a.text, 'html.parser')
h = soup.find('type')   ...('div') ... ('input') ... even ('var')
    print(soup)

没有运气:(

是否有获取价值的方法?如果可以,怎么办?

2 个答案:

答案 0 :(得分:2)

在不同页面上了解有关myElement.value的更多信息将很有帮助。您可能会遇到一个简单的字符集和引导字符串,如下面的正则表达式所示。我想收紧它,但需要更多示例.....也许这些数字长度是固定的并且重复? .....然后像p = re.compile(r"myElement\.value = '(\d{10}(?:(\s\d{3}\.\d{2}\.\d{3}\.\d{3}){2}))';") <=然后进入第1组。

import re

s = '''bb2_addLoadEvent(function() {
    for ( i=0; i < document.forms.length; i++ ) {
        if (document.forms[i].method == 'post') {
            var myElement = document.createElement('input');
            myElement.setAttribute('type', 'hidden');
            myElement.name = 'bb2_screener_';
            myElement.value = '1568090530 122.44.202.205 122.44.202.205';
            document.forms[i].appendChild(myElement);
        }'''

p = re.compile(r"myElement\.value = '([\d\s\.]+)';")
print(p.findall(s)[0])

@SIM也建议:

p = re.compile(r"value[^']+'([^']*)'"

答案 1 :(得分:0)

如果myElement.value =是静态的,则可以使用简单的正则表达式来实现:

value = re.compile(r"myElement\.value = '([^']+)'").search(str).group(1)

此匹配myElement.value = ',后跟非'字符,再匹配另一个',其中所有非'字符都被捕获到一个组中。然后group(1)从匹配中提取组。

如果字符串也可能包含转义的',例如:

myElement.value = 'foo \' bar';

然后用\.替换[^']

myElement\.value = '((?:\\.|[^'])+)'

https://regex101.com/r/Tdarel/1