達成するためにボス直接雇用ジョブをクロールパイソン

1つの準備、いくつかのパブリックメソッド

データベース・リンクへのアクセス:

インポートpymysqlの
 #は、データベース・リンクオブジェクトを取得
DEF :getConnect(データベース)
    DATABASE = {
         ' ホスト'' localhostの' ' データベース' :データベース、
         ' ユーザー'' ルート' ' パスワード'' 123456 ' 
    } 
    戻り pymysql.connect (** DATABASE)

ページのスープオブジェクトを取得します。

インポート要求
 から BS4 インポートBeautifulSoupの
 #は、スープのオブジェクトに変換
DEF (STR)をto_soup:
     返す BeautifulSoup(STR、' lxmlのを' #は、URLやスープヘッダを経由して、ページオブジェクトを取得
DEF :(URL、ヘッダ)get_soup 
    レスポンス = requests.get(URLを、ヘッダ= ヘッダ)
     戻り to_soup(response.text)

2、BOSS関連位置パイソンをクロール達成するために使用線形

情報オブジェクト定義を動作します。

クラスWorkInfo:
     デフ __init__ (自己、タイトル、給与、サイト、経験、教育、job_url、会社、RELEASE_DATE、get_date):
        self.title = タイトル
        self.salary = 給与
        self.site = サイト
        self.experience = 経験
        self.education = 教育
        self.job_url = job_url 
        self.company = 会社
        self.release_date = RELEASE_DATE 
        self.get_date = get_date

オブジェクト定義のセットにジョブ情報を取得します。

ジョブ情報収集入手
DEFのgetWorkInfos(URL、ヘッダ):
        は、ページのスープのターゲットを取得 
        htmlSoup = rep.get_soup(URL、ヘッダ)
        workInfos = []
        は、ページコンテンツのブロックリストを取得 
        job_infos = htmlSoup.find_all(' div要素'、class_が= ジョブ・プライマリIF LEN(job_infos)== 0:
             印刷空白のページがあります!!! の戻りworkInfosの
         #は、各ブロック、各取得詳細なクラスのコンテンツトラバース
        印刷をページデータがクロールを開始!' のための job_info_soup job_infos:
                标题 
                タイトル= job_info_soup.find(' div要素'class_が= ' ジョブのタイトル' ).get_text()
                薪资 
                給与= job_info_soup.find(' スパン'class_が= ' " )。 GET_TEXT()
                に関する情報 = STR(job_info_soup.find(' P ' ))
                infosList = tool.toContent(に関する情報)
                 作業アドレス 
                サイト= infosListは、[0]
                経験の 
                好み体験infosList = [1 ]
                 アカデミック要件 
                教育= infosList [2 ]
                 #の詳細情報へのリンク 
                job_url job_info_soup.find =(' A ')に.get(' HREF ' #の会社名 
                = job_info_soup.findカンパニー(' DIV '、class_が= ' 会社テキスト').find(' A ').get_text()
                公開 
                RELEASE_DATE = job_info_soup.find(' div要素'、class_が= ' インフォ-Publis ').find(' p型').get_text()[3 :]
                 #1 の要件に沿って縫い取得日のデータベース・キャラクタストリング
                IF  ' 昨日'  RELEASE_DATE:
                    RELEASE_DATE = time.strftime(" %Y-M-%のDの%"、time.localtime(time.time() - 86400 ))
                 のelif  ' '  RELEASE_DATE。
                    RELEASE_DATE = time.strftime(" %Y-%M-%D " 
                     RELEASE_DATE = STR(time.localtime()のtm_year)+ ' - ' + re.sub(R ' [月、日] '' - '、RELEASE_DATE): - 1 ]
                 获取数据时间的 
                get_date = time.strftime(" %Y-%M-%D%H:%のM:%のS " 
                workInfo = workInfo(タイトル、給料、サイト、経験、教育、job_url、会社、RELEASE_DATE、get_date)
                workInfos.append(workInfo)
        を印刷' ページデータが終了したクローリング!' 返す workInfosを

データベースに格納された情報の収集を動作させるために:

存入数据库
DEF toDatabase(workInfos):
     プリント' 开始存入数据库' 
    DB = database.getConnect(' 爬虫類' 
    カーソル = db.cursor()
     のために workInfo workInfos:
        SQLは = " (work_info``。INSERT INTO `title`、` salary`、 `site`、` experience`、 `education`、` job_url`、 `company`、` release_date`、 `get_date`)" \
           " VALUES( '%s'は、 '%s'は、 '%s'は、 '%s'は、 '%s'は、 '%s'は、 '%s'は、 '%s'は、 '%S')"\
          (workInfo.title、workInfo.salary、workInfo.site、workInfo.experience、workInfo.education、workInfo.job_url、workInfo.company、workInfo.release_date、workInfo.get_date)
        cursor.execute(SQL)
    cursor.close()
    DB。 ()コミット
    db.close()
    印刷' 存入数据库完毕を!'

達成するために仕事をクロール:

URL = " https://www.zhipin.com/c101270100/?' 
ヘッダ = {
     ' ユーザーエージェント'' のMozilla / 5.0(のWindows NT 6.3、Win64の、のx64)のAppleWebKit / 537.36(KHTML、ヤモリ等)クローム/ 69.0.3497.100サファリ/ 537.36 ' ' リファラー''' ' クッキーlastCity = 101270100; _uab_collina = 155876824002955006866925。トン= DPiicXvgrhx7xtms。重量= DPiicXvgrhx7xtms。SID = sem_pz_bdpc_dasou_title。__c = 1559547631。__g = sem_pz_bdpc_dasou_title。__l = L =%2Fwww.zhipin.com%2F%3Fsid%3Dsem_pz_bdpc_dasou_title&R = HTTPS%3A%2F%2Fsp0.baidu.com%2F9q9JcDHa2gU2pMbgoY3K%2Fadrc.php%3フィート%3D06KL00c00fDIFkY0IWPB0KZEgsZb1OwT00000Kd7ZNC00000JqHYFm。3Did(%252522m3224604348_canvas%252522)%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FH2%25255B1%25255D%25252FA%25255B1%25255D% 2526linkType%253D%2526checksum%253D8%26wd%3Dboss%25E7%259B%25B4%25E8%2581パーセント2598パーセント26issp%3D1%26F%3D3%26ie%3Dutf-8%26rqlang%3Dcn%26tn%3Dbaiduhome_pg%26oq%3D% 2525E5%25258D%25259A%2525E5%2525AE%2525A2%2525E5%25259B%2525AD%26inputT%3D9649%26prefixsug%3Dboss%26rsp%3D0&G =%2Fwww.zhipin.com%2F%3Fsid%3Dsem_pz_bdpc_dasou_title。Hm_lvt_194df3105ad7148dcf2b98a91b5e727a = 1558768262,1558768331,1559458549,1559547631。JSESSIONID = A0FC9E1FD0F10E42EAB681A51AC459C7。' 
             ' __a = 86180698.1558768240.1559458549.1559547631.63.3.6.6。Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a = 1559551561 ' 
              ' リファラー:https://www.zhipin.com/c101270100/?query=python&page=2&ka=page-2 ' 
} 
クエリ = ' のpython ' 
ページ = 1
 つつ真:
     印刷" 开始第:{}页" .format(ページ))
    裏編み = URL + ' 問合せは、= ' +クエリ+ ' &ページ= ' + STR(ページ)+ ' &KA = PAGE- '= getWorkInfos(裏編み、ヘッダ)
     場合でlen(workInfos)== 0:
         印刷' !结束爬取' 破る
    toDatabase(workInfos)
    ページ =ページ+ 1

少し知識を含む3、

自家製のHTMLタグをフェッチ、リストに保存されているラベルの内容に含めます:

正規表現タグ内のテキストのリストを取得し、HTMLタグを削除
DEF toContent(STR):
    に関する情報 = re.split(' <[^>] *> ' 、STR)
    空の要素を削除
    返す一覧(フィルタ(なしを、に関する情報))

時間関連の操作

「 - 」の交換「月」「日付」:

re.sub(R '[月、日]'、 ' - '、RELEASE_DATE)

買収前日「:

RELEASE_DATE = time.strftime( "%Y-%M-%D"、time.localtime(time.time() -  86400))

 



おすすめ

転載: www.cnblogs.com/tutuwowo/p/10975003.html