如何将特定的html属性提取到变量中

时间:2018-11-06 21:09:32

标签: python html selenium beautifulsoup

因此标题可能确实措词不当,但我不确定该如何写。因此,我请求帮助来使用beautifulsoup4抓取数据,并且有人足够帮助我。

import requests
from bs4 import BeautifulSoup
import re

#NJII 
params = {
    'action': 'vc_get_vc_grid_data',
    'tag': 'vc_basic_grid',
    'data[page_id]': 26,
    'data[shortcode_id]': '1524685605316-ae64dc93-e23d-3',
    '_vcnonce': 'b9fb62cf69' #Need to update this somehow
}
dateList = []
urlList = []
url = 'http://njii.com/wp-admin/admin-ajax.php'
r = requests.get(url, params=params)
soup = BeautifulSoup(r.text, 'html.parser')
for div in soup.find_all('div', class_='vc_gitem-animated-block'):
    if re.search('2018', div.find('a')['href']):
        urlList.append(div.find('a')['href'])
        dateList.append(div.find('a')['href'])

#print(urlList)

count = 0;
while(count < len(dateList)):
    dateList[count] = re.search('[0-9]{4}/[0-9]{2}/[0-9]{2}', dateList[count])
    dateList[count] = dateList[count].group()
    count = count + 1

print(dateList[1])

因此,这几乎可以满足我的需求,但是随后出现了问题。我需要为我的项目抓取数据的网站每天更新_vcnonce变量。所以我的问题真正归结为是否有可能将特定的html字符串转换为变量。因此,每次我运行代码时,它都会自动更新。像这样

variable = w.e vcnonce attribute is
'_vcnonce': variable

或类似的东西。这是一个项目,我需要获取信息,并且能够将硒和beautifulsoup用于其他网站。但是无论如何,这只是给我带来了问题。因此,我也尝试使用硒,但它无法正常工作,我不确定即使硒也需要相同的参数。很抱歉这个长问题。不确定什么是最好的方法。

1 个答案:

答案 0 :(得分:1)

您需要首先从事件页面获取值。然后可以将其用于发出其他请求。它作为属性包含在div元素内:

import requests
from bs4 import BeautifulSoup
import re

# First obtain the current nonce from the events page
r = requests.get("http://njii.com/events/")
soup = BeautifulSoup(r.content, 'html.parser')
vcnonce = soup.find('div', attrs={'data-vc-public-nonce':True})['data-vc-public-nonce']

#NJII 
params = {
    'action': 'vc_get_vc_grid_data',
    'tag': 'vc_basic_grid',
    'data[page_id]': 26,
    'data[shortcode_id]': '1524685605316-ae64dc93-e23d-3',
    '_vcnonce': vcnonce,
}
dateList = []
urlList = []

url = 'http://njii.com/wp-admin/admin-ajax.php'
r = requests.get(url, params=params)
soup = BeautifulSoup(r.text, 'html.parser')

for div in soup.find_all('div', class_='vc_gitem-animated-block'):
    if re.search('2018', div.find('a')['href']):
        urlList.append(div.find('a')['href'])
        dateList.append(div.find('a')['href'])

dates = [re.search('[0-9]{4}/[0-9]{2}/[0-9]{2}', date).group() for date in dateList]
print(dates)

这将为您提供以下输出:

['2018/11/01', '2018/10/22', '2018/10/09', '2018/10/09', '2018/10/03', '2018/09/27', '2018/09/21', '2018/09/13', '2018/09/12', '2018/08/24', '2018/08/20', '2018/08/02', '2018/07/27', '2018/07/11', '2018/07/06', '2018/06/21', '2018/06/08', '2018/05/24', '2018/05/17', '2018/05/14', '2018/05/04', '2018/04/20', '2018/03/28', '2018/03/26', '2018/03/23', '2018/03/22', '2018/03/15', '2018/03/15', '2018/02/27', '2018/02/19', '2018/01/18']