Как извлечь данные с безопасного сайта, такого как Bloomberg - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь очистить этот URL:

"https://www.bloomberg.com/news/articles/2019-05-30/tesla-dealt-another-blow-as-barclays-sees-it-as-niche-carmaker"

Я хотел получить только название и дату публикации, любой пример кода, который вы можете дать мне, даже всплеск и т. д.

пока что я попробовал это

 def parse(self, response):
   yield scrapy.Request('https://www.bloomberg.com/news/articles/2019-05-30/tesla-dealt-another-blow-as-barclays-sees-it-as-niche-carmaker -H x-crawlera-use-https:1',
        headers={'X-Crawlera-Session': create,
        'X-Crawlera-Timeout': 40000,
        'X-Crawlera-Max-Retries': 5,
        'X-Crawlera-Cookies': disable,
        'X-Crawlera-Session': self.session_id
        },
        callback=self.parse_sub,
        )

 def parse_sub(self, response):
    response.xpath("//h1[@class = 'lede-text-v2__hed']").extract_first()
    response.xpath("//meta[@property = 'og:title']/@content").extract_first()
    response.xpath("//time[@class = 'article-timestamp']/@datetime").extract_first()
   print(response.text)

Я также использую crawlera, но он продолжает обнаруживать меня как робота

1 Ответ

1 голос
/ 11 июня 2019

Использование только для извлечения заголовка , т. Е. Тесла Делт Еще один удар, когда Барклайс называет это 'нишей Carmaker' и датой публикации т. Е. 30 мая 2019 г., 17:26 по Гринвичу + 5: 30 вам нужно вызвать WebDriverWait для visibility_of_element_located(), и вы можете использовать следующее решение:

  • Кодовый блок

    from selenium import webdriver
    
    driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get('https://www.bloomberg.com/news/articles/2019-05-30/tesla-dealt-another-blow-as-barclays-sees-it-as-niche-carmaker')
    print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='markets']//following:: h1[1]"))).get_attribute("innerHTML"))
    print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='markets']//following:: h1[1]//following::div[@class='lede-text-v2__times']/time[@itemprop='datePublished']"))).get_attribute("innerHTML"))
    driver.quit() 
    
  • Консольный вывод:

    Tesla Dealt Another Blow When Barclays Calls It a ‘Niche Carmaker’
    May 30, 2019, 5:26 PM GMT+5:30
    
  • Примечание : Вы должны добавить следующий импорт:

    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
    
...