1. 程式人生 > >Python 爬蟲-模擬登入知乎-爬取拉勾網職位資訊

Python 爬蟲-模擬登入知乎-爬取拉勾網職位資訊

用Python寫爬蟲是很方便的,最近看了xlzd.me的文章,他的文章寫的很到位,提供了很好的思路。因為他的文章部分程式碼省略了。下面是基於他的文章的三個程式碼片段:
基於Python3,Python2的話需要修改下input輸入函式和print的用法。

  1. 爬取豆瓣電影top250
  2. 爬取拉勾網職位資訊
  3. 模擬登陸知乎
  4. 為什麼沒人給我點贊。?!

有些程式碼做了更改。其中把獲取的資料儲存到excel中。關於存取資料到excel可以看我的另一篇文章:

用到的庫

  • requests
  • Beautiful Soup
  • openpyxl

1. 爬取豆瓣電影top250,存到excel表格中

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 #!/usr/bin/env python# encoding=utf-8import requests,reimport codecsfrom bs4 import BeautifulSoupfrom openpyxl import
Workbookwb=Workbook()dest_filename='電影.xlsx'ws1=wb.active  ws1.title="電影top250"DOWNLOAD_URL='http://movie.douban.com/top250/'def download_page(url):"""獲取url地址頁面內容"""headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'}data
=requests.get(url,headers=headers).contentreturndatadef get_li(doc):soup=BeautifulSoup(doc,'html.parser')ol=soup.find('ol',class_='grid_view')name=[]#名字star_con=[]#評價人數score=[]#評分info_list=[]#短評foriinol.find_all('li'):detail=i.find('div',attrs={'class':'hd'})movie_name=detail.find('span',attrs={'class':'title'}).get_text()#電影名字level_star=i.find('span',attrs={'class':'rating_num'}).get_text()#評分star=i.find('div',attrs={'class':'star'})star_num=star.find(text=re.compile('評價'))#評價info=i.find('span',attrs={'class':'inq'})#短評ifinfo:#判斷是否有短評info_list.append(info.get_text())else:info_list.append('無')score.append(level_star)name.append(movie_name)star_con.append(star_num)page=soup.find('span',attrs={'class':'next'}).find('a')#獲取下一頁ifpage:returnname,star_con,score,info_list,DOWNLOAD_URL+page['href']returnname,star_con,score,info_list,Nonedef main():url=DOWNLOAD_URLname=[]star_con=[]score=[]info=[]whileurl:doc=download_page(url)movie,star,level_num,info_list,url=get_li(doc)name=name+moviestar_con=star_con+starscore=score+level_numinfo=info+info_listfor(i,m,o,p)inzip(name,star_con,score,info):col_A='A%s'%(name.index(i)+1)col_B='B%s'%(name.index(i)+1)col_C='C%s'%(name.index(i)+1)col_D='D%s'%(name.index(i)+1)ws1[col_A]=iws1[col_B]=mws1[col_C]=ows1[col_D]=pwb.save(filename=dest_filename)if__name__=='__main__':main()

結果如下:

2. 爬取拉勾網Python職位資訊

職位資訊儲存在json中,獲取到json物件,再從中遍歷出公司名、地址、待遇等資訊。

Python
12345678910111213141516171819202122232425262728293031323334353637 importrequestsfromopenpyxl importWorkbookdefget_json(url,page,lang_name):data={'first':'true','pn':page,'kd':lang_name}json=requests.post(url,data).json()list_con=json['content']['positionResult']['result']info_list=[]foriinlist_con:info=[]info.append(i['companyShortName'])info.append(i['companyName'])info.append(i['salary'])info.append(i['city'])info.append(i['education'])info_list.append(info)returninfo_listdefmain():lang_name=input('職位名:')page=1url='http://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'info_result=[]whilepage<31:info=get_json(url,page,lang_name)info_result=info_result+infopage+=1wb=Workbook()ws1=wb.activews1.title=lang_nameforrow ininfo_result:ws1.append(row)wb.save('職位資訊.xlsx')if__name__=='__main__':main()

執行結果:

3. 模擬登入知乎

通過開發者工具,獲取post的資料。

12345678910111213141516171819202122232425 import requests,timefrom bs4 import BeautifulSoupdef get_captcha(data):with open('captcha.gif','wb')asfp:fp.write(data)returninput('輸入驗證碼:')def login(username,password,oncaptcha):sessiona=requests.Session()headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'}_xsrf=BeautifulSoup(sessiona.get('https://www.zhihu.com/#signin',headers=headers).content,'html.parser').find('input',attrs={'name':'_xsrf'}).get('value')captcha_content=sessiona.get('https://www.zhihu.com/captcha.gif?r=%d&type=login'%(time.time()*1000),headers=headers).contentdata={"_xsrf":_xsrf,"email":username,"password":password,"remember_me":True,"captcha":oncaptcha(captcha_content)}resp=sessiona.post('https://www.zhihu.com/login/email',data,headers=headers).contentprint(resp)returnresp if__name__=="__main__":login('your_email','your_password',get_captcha)

執行後會在執行目錄下得到驗證碼圖片:

輸入驗證碼後得到如下響應結果表明登入成功。

相關推薦

Python 爬蟲-模擬登入-職位資訊

用Python寫爬蟲是很方便的,最近看了xlzd.me的文章,他的文章寫的很到位,提供了很好的思路。因為他的文章部分程式碼省略了。下面是基於他的文章的三個程式碼片段: 基於Python3,Python2的話需要修改下input輸入函式和print的用法。 爬取豆瓣電影top250 爬取拉勾網職位資訊 模擬

【圖文詳解】scrapy爬蟲與動態頁面——職位資訊(1)

5-14更新 注意:目前拉勾網換了json結構,之前是content - result 現在改成了content- positionResult - result,所以大家寫程式碼的時候要特別注意加上

【圖文詳解】scrapy爬蟲與動態頁面——職位資訊(2)

上次挖了一個坑,今天終於填上了,還記得之前我們做的拉勾爬蟲嗎?那時我們實現了一頁的爬取,今天讓我們再接再厲,實現多頁爬取,順便實現職位和公司的關鍵詞搜尋功能。 之前的內容就不再介紹了,不熟悉的請一定要去看之前的文章,程式碼是在之前的基礎上修改的

Scrapy職位資訊

很多網站都用了一種叫做Ajax(非同步載入)的技術,通常我們會發現這種網頁,打開了,先給你看上面一部分東西,然後剩下的東西再慢慢載入,也就是區域性載入。所以你可以看到很多網頁,瀏覽器中的網址沒變,但是資料照樣是可以更新的。這對我們正確爬取資料造成了一定影響,我們

python爬蟲——模擬登入教務系統成績

主要思路 1.模擬登入到教務處,獲取登入的cookie值,用獲取到的cookie值,訪問成績的網址,分析成績頁面,獲取成績資訊。 2.打包成exe檔案,方便使用 ,我們可以用自己寫的程式快速查詢我們的成績,速度要比正常登入教務處網址查詢快很多,也比超級課程表

爬蟲學習之17:網網招聘資訊(非同步載入+Cookie模擬登陸)

         很多網站需要通過提交表單來進行登陸或相應的操作,可以用requests庫的POST方法,通過觀測表單原始碼和逆向工程來填寫表單獲取網頁資訊。本程式碼以獲取拉勾網Python相關招聘職位為例作為練習。開啟拉鉤網,F12進入瀏覽器開發者工具,可以發現網站使用了A

python爬蟲: 職位並分析

0. 前言 本文從拉勾網爬取深圳市資料分析的職位資訊,並以CSV格式儲存至電腦, 之後進行資料清洗, 生成詞雲,進行描述統計和迴歸分析,最終得出結論. 1. 用到的軟體包 Python版本: Python3.6 requests: 下載網

python招聘資訊並以CSV檔案儲存

爬取拉勾網招聘資訊 1、在網頁原始碼中搜索資訊,並沒有搜到,判斷網頁資訊使用Ajax來實現的 2、檢視網頁中所需的資料資訊,返回的是JSON資料; 3、條件為北京+資料分析師的公司一共40087家,而實際拉勾網展示的資料只有 15條/頁 * 30頁 = 450條,所以需要判斷

Python招聘資訊存入資料庫

先抓包分析我們想要獲取的資料,很明顯都是動態資料,所以直接到Network下的XHR裡去找,這裡我們找到具體資料後,就要去尋分析求地址與請求資訊了。還有需要提交的表單資訊分析完畢之後,我們就可以開始寫我們的爬蟲專案了。一.編寫Itemitem編寫比較簡單# 拉鉤職位資訊 cl

Python招聘資訊

此程式碼執行建議Python3,省卻中文編碼的麻煩 遇到的幾個問題: (1)拉鉤網的資料是通過js的ajax動態生成,所以不能直接爬取,而是通過post’http://www.lagou.com/jobs/positionAjax.json?needAddt

Python招聘資訊並可視化分析

需求: 1:獲取指定崗位的招聘資訊 2:對公司地區,公司待遇,學歷情況,工作經驗進行簡單分析並可視化展示 視覺化分析: 公司地區:柱狀圖,地圖 公司待遇:雲圖 公司-學歷情況:餅圖 公司工作經

Python scrapy 招聘資訊

週末折騰了好久,終於成功把拉鉤網的招聘資訊爬取下來了。現在總結一下! 環境: windows 8.1 + python 3.5.0 首先使用 scrapy 建立一個專案: E:\mypy> scrapy startproject lgjob 建立後目錄結構:

HttpClient招聘資訊

1.匯入jar包 <dependency>       <groupId>org.apache.httpcomponents</groupId>       <artifactId>htt

scrapy抓職位資訊(一)——scrapy初識及lagou爬蟲專案建立

本次以scrapy抓取拉勾網職位資訊作為scrapy學習的一個實戰演練 python版本:3.7.1 框架:scrapy(pip直接安裝可能會報錯,如果是vc++環境不滿足,建議直接安裝一個visual studio一勞永逸,如果報錯缺少前置依賴,就先安裝依賴)     本篇

scrapy抓職位資訊(四)——對欄位進行提取

上一篇中已經分析了詳情頁的url規則,並且對items.py檔案進行了編寫,定義了我們需要提取的欄位,本篇將具體的items欄位提取出來 這裡主要是涉及到選擇器的一些用法,如果不是很熟,可以參考:scrapy選擇器的使用   依舊是在lagou_c.py檔案中編寫程式碼 首先是匯入Lag

python爬蟲模擬登陸

自從暑假學了大概一個月左右的爬蟲,開學之後就沒怎麼搞爬蟲了,當時也就學到scrapy框架就放下了,大致瞭解了一下框架,不是太理解,但是在這之前本人的爬蟲水平也僅僅侷限於爬取簡單頁面,爬取動態頁面也稍微瞭解下,但是一直沒有學模擬登陸,因為當時怎麼也搞不懂模擬登陸是

Python爬蟲資料分析崗位資料

1 JSON介紹 JSON(JavaScript Object Notation)已經成為通過HTTP請求在Web瀏覽器和其他應用程式之間傳送資料的標準格式之一。比CSV格式更加靈活。Json資料格式,非常接近於有效的Pyhton程式碼,其特點是:JSON物件所

python爬蟲學習筆記分析Ajax果殼文章

有時在使用requests抓取頁面會遇到得到的結果與在瀏覽器 中看到的結果不一樣,在瀏覽器檢查元素中可以看到的正常的顯示的網頁資料,但是requests請求得到的結果卻沒有。這是因為requests請求得到的時原始的html文件,而瀏覽器中的介面確實經過JavaScript處理資料生成的結果

python爬蟲(16)使用scrapy框架頂點小說

本文以scrapy 框架來爬取整個頂點小說網的小說 1.scrapy的安裝 這個安裝教程,網上有很多的例子,這裡就不在贅述了 2.關於scrapy scrapy框架 是一個非常好的東西,能夠實現非同步爬取,節省時間,其實本文純粹的按照之前的思維來做, 也不是不可以,但是感

Python 爬蟲入門-實戰

這幾天學習了 python 爬蟲的入門知識,也遇到很多坑,開個貼記錄一下 基本原理 Python 爬蟲基本要具備以下功能:(參考此回答) 向伺服器傳送請求,伺服器響應你的請求。(你可能需要了解:網頁的基本知識) 從抓取到的網頁中提取出需要