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))