Как вытащить определенный атрибут html в переменную - PullRequest
0 голосов
/ 07 ноября 2018

так что название, вероятно, действительно плохо сформулировано, но я не был уверен, как еще это произнести. Поэтому я попросил помочь использовать 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 голосов
/ 07 ноября 2018

Сначала необходимо получить значение со страницы событий. Это может быть использовано для дальнейших запросов. Он содержится в качестве атрибута внутри элемента 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']    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...