實習期間,公司安排了乙個簡單的任務,下面是任務要求:
基於招聘站點和企業名稱的 email採集
1. 獲取一批要採集email的企業
3. 從招聘頁面提取出企業的email(需要排除招聘站點官方、獵頭相關的email)。
4. 將採集的結果儲存到資料庫
**已經上傳到github上:基於招聘站點和企業名稱的 email採集
理一下大概的思路
初始url分幾鐘:智聯,獵聘,大街,前程無憂,中華英才網 這些都是需要進行單個站點的解析分別編寫**
連線資料庫提取企業名稱,插入url,進行get請求
解析各個站點獲取資訊
資訊進行正則匹配,匹配email
存到資料庫
檢查是否有api無
爬取的範圍
爬取的是需要採集的企業的email
多層網路結構間跳轉流程
選擇需要連線的資料庫和表
連線的表et_ema的ddl資訊:
create table `et_ema` ( `id` int(12) not null auto_increment comment 'id', `etid` int(11) not null comment '序號', `email` varchar(50) not null default '' comment '公司email', primary key (`id`), unique key `etid,email` (`etid`,`email`) ) engine=innodb auto_increment=1776 default charset=gbk row_format=dynamic comment='公司email'
確定爬取的字段和連線關係
公司email
main函式:
1. 連線資料庫
輸入:無
輸出:conn,cursor
2. 獲取公司資訊:etid,etname
輸入:cursor
輸出:companys
3. 站點**:獲取網頁資訊,1,2,3
輸入:url
輸出:text
4. 正則email,並去重
輸入:text
輸出:emails
5. 存入資料庫:一次存入一條資訊
輸入:conn, companys_email, table_name
輸出:無
6. 關閉資料庫
輸入:conn,cursor
輸出:無
正則匹配的問題:
1. 不匹配括號裡的內容的方法:使用 ?:
2. [...]可以匹配【】中的任意字元,如[abc]即匹配a,b,c的任意乙個字元
3. findall匹配後不能使用group
字典和檔案格式轉換:
1.json.dumps 將 python 物件編碼成 json 字串
2.json.loads 將已編碼的 json 字串解碼為 python 物件
3. 讀取txt檔案裡的字典(開啟,read,load,關閉)
file = open('text.txt', 'r')
js = file.read()
dic = json.loads(js)
print (dic)
file.close()
4. 字典寫入txt:
dic = ,
'william':
}js = json.dumps(dic)
file = open('test.txt', 'w')
file.write(js)
file.close()
screen的用法:
screen:可以通過該軟體同時連線多個本地或遠端的命令行會話,並在其間自由切換,可以後台執行爬蟲
後台執行爬蟲的步驟:
1. 直接執行爬蟲
screen python run.py
2. 退出儲存視窗
ctrl+a+d
3. 檢視開啟的screen(意思的『螢幕』)
screen -ls
4. 重新開啟關閉的screen
screen -r 50126
xpath匹配問題:
一屬性多值:[contains(@class, "li")]
對於如何將edid對應:
獲取的時候同時將etid和etname從資料庫中拿出來,之後儲存的時候再一起存進去
如何去除list中重複的元素:
使用內建的set函式:
i = ['b','c','d','b','c','a','a']
z = list(set(i))
print z
在資料庫中建立表:
create table if not exists `et_email` (
`id` int(12) not null auto_increment comment 'id',
`etid` int(11) not null comment '序號',
`email` varchar(30) not null default '' comment '公司email',
primary key (`id`),`et_email`
key (`etid`)
) engine=innodb default charset=gbk row_format=dynamic comment='公司email'
replace into et_email(etid,email) values('100224953','[email protected]')
replace into et_email(etid,email) values('2817270','[email protected]')
多協程的問題:
gevent.pool不能進行多引數的傳遞,可以使用from functools import partial來進行多引數的傳遞
使用方法:
def run (a,b):
pass
partial.work = partial(run, a)
gevent.pool.map(partial.work,b)
(注意:
partial不能有迭代的引數
map函式是需要是以迭代的方式來對b進行資料的提取,以後以引數的形式呼叫
如果有多個需要迭代的引數,可以使用z = zip(a,b))
基於web站點的xss攻擊
xss cross site script 全稱跨站指令碼攻擊,為了與 css cascading style sheet 有所區別,所以在安全領域稱為 xss。xss 攻擊,通常指黑客通過html 注入篡改網頁,插入惡意指令碼,從而在使用者瀏覽網頁時,控制使用者瀏覽器的一種攻擊行為。在這種行為最初...
經營企業還是經營人才 剖析世界名企如何招聘策略
沃爾瑪 從小時工做起 在沃爾瑪,員工有大學學歷,或有一張 mba文憑並不見得能夠贏得高階主管的賞識,只有通過自己的努力,以傑出的工作業績證明了自己的實力才行。財富 雜誌曾這樣評價沃爾瑪 它只認同花大錢的培訓和提公升激勵以贏得雇員的忠誠和熱情。管理人員中有 60 的人是從小時工做起的。當然,這並不是說...
基於PHP MySQL的校園兼職招聘平台
隨著我國教育體制的改革。對大學生的要求也越來越高大,學生已經不僅僅只限於學習書本上的知識,他們也需要積極地參加到社會活動中來。其中兼職就是一項很好的鍛鍊自己的機會。在兼職的時候,不僅能夠鍛鍊自己,同時還能夠有一部分的收入來補貼自己。這樣大學生就。我哥有更多的經濟收入 而且不在向家裡伸手要錢。更重要的...