【发布时间】:2021-11-11 20:07:45
【问题描述】:
我有一个简单的网络爬虫(在 ubuntu 上使用 selenium 在 chrome-headless 模式下进行爬取),它遍历相同的页面以获取一些信息:
#set driver options
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--window-size=1420,1080')
chrome_options.add_argument('--headless')
chrome_options.add_argument("--disable-features=VizDisplayCompositor");
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--remote-debugging-port=9222")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
chrome_options.binary_location='/usr/bin/google-chrome-stable'
chrome_driver_binary = "/usr/bin/chromedriver"
driver = webdriver.Chrome(executable_path=chrome_driver_binary, chrome_options=chrome_options)
#Set base url
base_url = 'www.example.com&page='
events = []
eventContainerBucket = []
for i in range(1,30):
#cycle through pages in range
driver.get(base_url + str(i))
pageURL = base_url + str(i)
# get events links
event_list = driver.find_elements_by_css_selector('div[class^=_1abc] a[class^=_1xyz]')
# collect href attribute of events in even_list
events.extend(list(event.get_attribute("href") for event in event_list))
print("total events: ", (len(events)))
#GET request user-agent
headers = {'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"}
# iterate through all events and open them.
item = {}
allEvents = []
for event in events:
try:
driver.get(event)
currentUrl = driver.current_url
print(currentUrl)
except TimeoutException as ex:
print(ex.Message)
webDriver.navigate().refresh()
try:
currentRequest = requests.get(currentUrl, headers=headers)
print (currentRequest)
#print currentRequest.status_code
except requests.exceptions.RequestException as e:
print(e)
continue
我的问题:
直到昨天,当我开始收到 403 错误时,一切都运行良好。通常,该脚本将遍历大约 20-30 个 url 没问题,但它会给我一个 403 响应。
我的尝试:
尝试将请求标头更改为:
headers={'User-Agent': 'Mozilla/5.0'})
仍然收到 403。我需要为驱动程序添加等待时间吗?谢谢。
【问题讨论】:
-
尝试复制您使用的浏览器中的所有标题,而不仅仅是用户代理。
-
我怎样才能得到标题?我在 chrome-headless 中使用 selenium,在 ubuntu 中...
标签: python selenium-webdriver python-requests selenium-chromedriver http-headers