Я пытаюсь почерпнуть некоторую информацию с веб-сайта Департамента зданий Нью-Йорка C, используя селен и хром-драйвер в python, но при запуске кода я получаю страницу "Отказано в доступе". Я попытался прочитать все, что я могу об этой проблеме в Интернете, и я попытался изменить настройки пользовательского агента chromedriver, но безрезультатно. Я подтвердил, что этот код работает, когда я пытаюсь очистить другой веб-сайт.
Для контекста я специально пытаюсь очистить имя владельца, адрес электронной почты, номер здания и название улицы от сайтов с идентификаторами зданий, таких как следующее: http://a810-bisweb.nyc.gov/bisweb/JobsQueryByNumberServlet?passjobnumber=321555811&passdocnumber=&go10=+GO+&requestid=0.
Я очень новичок в Python, поэтому я ожидаю, что моя ошибка может быть довольно базовой c. Любая помощь будет высоко ценится.
Вот мой код:
from selenium.webdriver import Chrome
import pandas as pd
# I am using selenium and chromedriver for the headless browser, and pandas for output to a csv.
webdriver = "/Users/laurenmackler/Coding/DOB_Scraper/env_scraper_1/bin/chromedriver"
from selenium.webdriver.chrome.options import Options
driver = Chrome(webdriver)
# I tried to add these lines to make the DOB website not recognize that I'm using a headless browser, but it did anyways.
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
chrome_options = Options()
chrome_options.add_argument('user-agent={0}'.format(user_agent))
# These job IDs are for two residential buildings in brooklyn which just received certificates of occupancy.
# I first wanted to be able to scrape just two such websites before attempting to scrape several hundred.
job_ids = ("321555811","320624286")
# You can see the pages here:
# http://a810-bisweb.nyc.gov/bisweb/JobsQueryByNumberServlet?passjobnumber=320624286&passdocnumber=&go10=+GO+&requestid=0
# http://a810-bisweb.nyc.gov/bisweb/JobsQueryByNumberServlet?passjobnumber=321555811&passdocnumber=&go10=+GO+&requestid=0
# I wanted to be able to scrape from two different pages at first, but eventually I would need to somehow be able to list hundreds or thousands of job IDs.
for job_id in job_ids:
url = "http://a810-bisweb.nyc.gov/bisweb/JobsQueryByNumberServlet?passjobnumber=" + str(job_id) + "&passdocnumber=&go10=+GO+&requestid=0"
driver.get(url)
# Now, I am trying to scrape four particular pieces of information from each page: the owner name, the owner email, the house number, and the street.
# The DOB website does not have clean html IDs or distinctive classes, so I first searched for all "content" classes, and then specified the specific data with Xpaths.
items = len(driver.find_elements_by_class_name("content"))
total = []
for item in range(items):
contents = driver.find_elements_by_class_name("content")
for content in contents:
owner_name = content.find_element_by_xpath('/html/body/center/table[35]/tbody/tr[3]/td[2]').text
owner_email = content.find_element_by_xpath('/html/body/center/table[35]/tbody/tr[7]/td[2]').text
house_number = content.find_element_by_xpath('/html/body/center/table[7]/tbody/tr[3]/td[2]').text
street_name = content.find_element_by_xpath('/html/body/center/table[7]/tbody/tr[3]/td[4]').text
new = ((owner_name,owner_email,house_number,street_name))
total.append(new)
df = pd.DataFrame(total,columns=['name','email','address','street'])
df.to_csv('certificate_of_occupancy.csv')
driver.close()
# Lines 34-37 are intended to output the scraped data into a csv file.
# When the chromedriver window pops up when I run the code, I see the text "access denied".
Любая помощь или указатели будут искренне оценены. Спасибо!