Как нажать на несколько & ldquo; + & rdquo; кнопки на странице в хронологическом порядке и извлекать данные из них с помощью Python?

Как правило, если вы используете кучу включений, это связано с тем, что вам нужно получить доступ к дочерним свойствам в представлении. Что я делаю, это упорядочить дочернюю коллекцию, когда мне нужно получить к ней доступ в виде.

Например, я мог бы создать некоторые инструкции Include для формы master / detail. Нет смысла упорядочивать это в исходном запросе EF. Вместо этого, почему бы не упорядочить эти дочерние записи на уровне представления, когда вы действительно обращаетесь к ним?

Возможно, у меня есть опрос с несколькими вопросами опроса. Если я хочу представить вопросы в определенном порядке, сделайте это на уровне частичного представления, когда я передаю дочернюю коллекцию модели на частичный вид.

@Html.Partial("_ResponsesPartial",Model.SurveyResponses.OrderBy(x => 
x.QuestionId))
0
задан DebanjanB 7 March 2019 в 20:00
поделиться

2 ответа

Вам не обязательно нужен селен. Вы можете использовать запросы, конечно, для большого набора результатов. Страница извлекает данные через сервер, который выполняет SQL-запрос, у которого есть параметр количества записей, который можно настроить для нужного количества результатов, nbr_ref_pge. Вы можете написать запрос POST, который передает необходимую информацию, которая затем передается в запрос SQL. Теперь вы можете рассчитать, как это может выглядеть в пакетах, чтобы получить общее количество, которое вам нужно, и посмотреть, есть ли смещение, чтобы учесть это.

У меня недостаточно опыта с asyncio, но я подозреваю, что это был бы хороший способ, так как количество запросов велико для отдельных страниц сайта. Моя попытка только с сеансом - шоу. Я взял синтаксис повторов из ответа @datashaman

import requests
import pandas as pd
from bs4 import BeautifulSoup as bs
from requests.packages.urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter

baseUrl = 'https://www.whed.net/'
searchTerm = 'Business Administration'
headers = {'Accept': 'application/json'}
params = {'Chp2' : searchTerm}
url = 'https://www.whed.net/results_institutions.php'
data = {
    'where': "(FOS LIKE '%|" + searchTerm + "|%')",
    'requete' : '(Fields of study=' + searchTerm + ')',
    'ret' : 'home.php',
    'afftri' : 'yes',
    'stat' : 'Fields of study',
    'sort' : 'InstNameEnglish,iBranchName',
    'nbr_ref_pge' : '1000'
}

results = []

with requests.Session() as s:
    retries = Retry(total=5,
                backoff_factor=0.1,
                status_forcelist=[ 500, 502, 503, 504 ])

    s.mount('http://', HTTPAdapter(max_retries=retries))
    res = s.post(url, params = params, headers = headers, data = data)
    soup = bs(res.content, 'lxml')
    links = set([baseUrl + item['href'] for item in soup.select("[href*='detail_institution.php?']")])

    for link in links:
        res = s.get(link)  
        soup = bs(res.content, 'lxml')
        items = soup.select('#contenu span')
        name = soup.select_one('#contenu h2').text.strip()
        country = soup.select_one('.country').text.strip()
        i = 0
        for item in items:
            if 'Tel.' in item.text:
                phone = items[i+1].text
            if 'WWW:' in item.text:
                website = items[i+1].text
            i+=1
        results.append([name, country, phone, website])
        name = country = phone = website = ''
df = pd.DataFrame(results)
0
ответ дан QHarr 7 March 2019 в 20:00
поделиться

Для извлечения ссылок веб-сайтов университетов с веб-сайта вам не понадобятся BeautifulSoup и Selenium могут легко извлекать необходимые данные, следуя приведенному ниже решению:

  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions()
    options.add_argument('start-maximized')
    options.add_argument('disable-infobars')
    options.add_argument('--disable-extensions')
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get('https://www.whed.net/results_institutions.php?Chp2=Business%20Administration')
    elements = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a.detail.fancybox[title='More details']")))
    for element in elements:
        WebDriverWait(driver, 30).until(EC.visibility_of(element)).click()
        WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.fancybox-iframe")))
        print(WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a.lien"))).get_attribute("innerHTML"))
        driver.switch_to_default_content()
        driver.find_element_by_css_selector("a.fancybox-item.fancybox-close").click()
    driver.quit()
    
  • Выход консоли:

    http://www.uni-ruse.bg
    http://www.vspu.hr
    http://www.vfu.bg
    http://www.uni-svishtov.bg
    http://www.universitateagbaritiu.ro
    http://www.shu-bg.net
    http://universityecotesbenin.com
    http://www.vps-libertas.hr
    http://www.swu.bg
    http://www.zrinski.org/nikola
    

[1114 ] Примечание : Остальные пункты телефон , имя и страна теперь можно легко извлечь.

0
ответ дан DebanjanB 7 March 2019 в 20:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: