在McMaster-Carr网站上抓取数据时出现的问题

时间:2020-05-19 04:04:47

标签: python selenium web-scraping

我正在为McMaster-Carr编写爬虫。例如,页面https://www.mcmaster.com/98173A200,如果我直接在浏览器中打开页面,则可以查看所有产品数据。

因为数据是动态加载的内容,所以我使用的是Selenium + bs4。

if __name__ == "__main__":
    url = "https://www.mcmaster.com/98173A200"
    options = webdriver.ChromeOptions()
    options.add_argument("--enable-javascript")
    driver = webdriver.Chrome("C:/chromedriver/chromedriver.exe", options=options)
    driver.set_page_load_timeout(20)
    driver.get(url)
    soup = BeautifulSoup(driver.page_source, "html.parser")
    delay = 20
    try:
        email_input = WebDriverWait(driver, delay).until(
            EC.presence_of_element_located((By.ID, 'MainContent')))
    except TimeoutException:
        print("Timeout loading DOM!")
    print(soup)

但是,如果运行代码,我将得到一个login dialog,而如果直接在我提到的浏览器中打开此页面,则不会得到access restricted


我还尝试使用下面的代码登录

   try:
        email_input = WebDriverWait(driver, delay).until(
            EC.presence_of_element_located((By.ID, 'Email')))
        print("Page is ready!!")
        input("Press Enter to continue...")
    except TimeoutException:
        print("Loading took too much time!")

    email_input.send_keys(email)
    password_input = driver.find_element_by_id('Password')
    password_input.send_keys(password)
    login_button = driver.find_element_by_class_name("FormButton_primaryButton__1kNXY")
    login_button.click()

然后显示errors


我将Selenium打开的页面中的请求标头与浏览器中的页面进行了比较,我没有发现任何错误。我还尝试了其他Webdriver,例如PhantomJS和FireFox,得到的结果相同。

我还尝试使用下面的代码使用随机用户代理

from random_user_agent.user_agent import  UserAgent
from random_user_agent.params import SoftwareName, OperatingSystem

software_names = [SoftwareName.CHROME.value]
operating_systems = [OperatingSystem.WINDOWS.value, OperatingSystem.LINUX.value]

user_agent_rotator = UserAgent(software_names=software_names,
                               operating_systems=operating_systems,
                               limit=100)

user_agent = user_agent_rotator.get_random_user_agent()

chrome_options = Options()
chrome_options.add_argument('user-agent=' + user_agent)

还是一样的结果。


Selenium打开的页面中的开发人员工具显示有一堆Python Docs。我想令牌授权是解决此问题的关键,但我不知道该怎么办。


任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

  1. 看到登录窗口的原因是您正在通过chrome驱动程序访问McMaster carr。服务器识别出您的行为后,将要求您登录。<​​/ li>
  2. 如果您尚未获得McMaster的身份验证(需要签署NDA),则通常无法登录
  3. 您应该研究McMaster API。使用API​​,您可以直接访问数据库。但是,您需要先与McMaster Carr签署NDA,然后才能访问API。 https://www.mcmaster.com/help/api/