python boss直任某職位情報(selenium+chromeの応用)
19556 ワード
主にseleniumによるデータ取得を記録する.boss直任をターゲットとしたサイトでは、指定されたポジションに関する情報を取得し、csv形式でローカルに存在することが主な目的です.
目次主な考え方 注意点 解決すべき問題 全体コード 主な考え方 seleniumを使用してシミュレーションブラウザを開き、boss直任urlにアクセスします.https://www.zhipin.com/ ある職位を入力して、検索 をクリックします検索結果ページで、表示された職階情報を解析し、 を保存します.複数のページが存在する場合は、次のページにジャンプします.手順3 を繰り返します.
注意すべき点
シミュレーションブラウザで開くと、あるポジションを検索すると登録ページにジャンプし、ログインしてから情報を表示する必要があります.ここには事前にcookiesを保存し、トップページを開き、browserを利用します.add_Cookie()事前に保存したcookiesを添付し、ページをリフレッシュしてから手順2を実行します.cookies保存方法:seleniumでログインページを開いた後、手動でログインし、現在のcookiesをローカルに保存します.
解決すべき問題
私は答えを探しているうちに、手動でドラッグしても間違っていることに気づき始めました.その後、ChromeとChromeDriverのバージョンが一致していないことに気づきました.後続のインストールかバージョンをアップグレードするか、ChromeとChromeDriverのバージョンが一致していることを覚えておいてください.その後バージョンを更新した後、少なくとも手動でドラッグするのは成功しました・・・
ソリッドコード
目次
注意すべき点
シミュレーションブラウザで開くと、あるポジションを検索すると登録ページにジャンプし、ログインしてから情報を表示する必要があります.ここには事前にcookiesを保存し、トップページを開き、browserを利用します.add_Cookie()事前に保存したcookiesを添付し、ページをリフレッシュしてから手順2を実行します.cookies保存方法:seleniumでログインページを開いた後、手動でログインし、現在のcookiesをローカルに保存します.
from selenium import webdriver
import json
browser = webdriver.Chrome()
browser.get('https://login.zhipin.com/?ka=header-login')
#
cookies = browser.get_cookies()
with open('boss_cookies.json', 'w', encoding='utf-8') as f:
f.write(json.dumps(cookies))
解決すべき問題
selenium , , ····· , ~~~
すでに試みられた解決策:自分がアナログブラウザであることを隠す、詳細は参照できる:1行のjsコードはSelenium+Webdriverとその対応策を識別するfrom selenium.webdriver import Chrome from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation']) driver = Chrome(options=option)
私は答えを探しているうちに、手動でドラッグしても間違っていることに気づき始めました.その後、ChromeとChromeDriverのバージョンが一致していないことに気づきました.後続のインストールかバージョンをアップグレードするか、ChromeとChromeDriverのバージョンが一致していることを覚えておいてください.その後バージョンを更新した後、少なくとも手動でドラッグするのは成功しました・・・
ソリッドコード
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver import ChromeOptions
import json, csv
import time
import random
def inquire_job(browser, job_name):
#
input_string = browser.find_element_by_css_selector('.ipt-search')
input_string.send_keys(job_name)
button = browser.find_element_by_class_name('btn')
button.click()
def get_job_items(browser):
#
items = browser.find_elements_by_xpath("//div[@class='job-list']//li")
file = open('boss_job_items.csv', 'a', encoding='utf-8')
fieldnames = ['job_title', 'job_url', 'salary', 'condition', 'company_title', 'company_url',
'company_info', 'publis_name']
writer = csv.DictWriter(file, fieldnames=fieldnames)
for item in items:
result = {}
job = item.find_element_by_class_name('info-primary')
result['job_title'] = job.find_element_by_class_name('job-title').text
result['job_url'] = job.find_element_by_css_selector('a').get_attribute('href')
result['salary'] = job.find_element_by_class_name('red').text
result['condition'] = job.find_element_by_css_selector('p').text
# ' 1-3 '
company = item.find_element_by_class_name('info-company')
result['company_title'] = company.find_element_by_css_selector('a').text
result['company_url'] = company.find_element_by_css_selector('a').get_attribute('href')
result['company_info'] = company.find_element_by_css_selector('p').text
publis = item.find_element_by_class_name('info-publis')
result['publis_name'] = publis.find_element_by_class_name('name').text
writer.writerow(result)
file.close()
def get_next_page(browser):
#
try:
pages = browser.find_element_by_class_name('page')
next_page_url = pages.find_element_by_class_name('next').get_attribute('href')
print(next_page_url)
return next_page_url
except NoSuchElementException:
raise NoSuchElementException
def main(job_name):
#
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument('--headless')
browser = webdriver.Chrome(options=options)
# cookies
with open('boss_cookies.json', 'r') as file:
data = file.read()
cookies = json.loads(data)
# cookies
browser.get('https://www.zhipin.com/')
for i in cookies:
browser.add_cookie(i)
browser.refresh()
while True:
try:
inquire_job(browser, job_name)
time.sleep(1)
get_job_items(browser)
next_page_url = get_next_page(browser)
time.sleep(random.uniform(1, 10))
browser.get(next_page_url)
except Exception:
break
browser.close()
if __name__ == '__main__':
start_time = time.time()
main('python ')
end_time = time.time()
print(end_time - start_time)