因此标题可能确实措词不当,但我不确定该如何写。因此,我请求帮助来使用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用于其他网站。但是无论如何,这只是给我带来了问题。因此,我也尝试使用硒,但它无法正常工作,我不确定即使硒也需要相同的参数。很抱歉这个长问题。不确定什么是最好的方法。
答案 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']