天天看點

Python爬蟲:爬取拉勾網招聘資訊

爬取拉勾網招聘資訊,可以自定義搜尋關鍵字。并把搜尋結果儲存在 excel 表格中

<code># -*- coding:utf-8 -*-</code>

<code>import</code> <code>requests,json,xlwt</code>

<code>kd </code><code>=</code> <code>'linux'</code>

<code>items </code><code>=</code> <code>[]</code>

<code>def</code> <code>get_content(pn):</code>

<code>    </code><code>#url和data通過F12檢視Network-&gt;XHR-&gt;Headers-&gt;Request URL和Form Data</code>

<code>    </code><code>url </code><code>=</code> <code>'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'</code>

<code>    </code><code>data </code><code>=</code> <code>{</code><code>'first'</code><code>:</code><code>'true'</code><code>,</code>

<code>            </code><code>'pn'</code><code>:pn,</code>

<code>            </code><code>'kd'</code><code>:kd}</code>

<code>    </code><code>#url發送一個post請求,把data資料發送過去</code>

<code>    </code><code>html </code><code>=</code> <code>requests.post(url,data).text  </code><code>#擷取文本</code>

<code>    </code><code>html </code><code>=</code> <code>json.loads(html)  </code><code>#json格式字元串解碼轉換成python字典對象</code>

<code>    </code><code>#print html</code>

<code>    </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>14</code><code>):  </code><code>#每頁15項職位</code>

<code>        </code><code>item </code><code>=</code> <code>[]</code>

<code>        </code><code>#下面參數通過F12檢視Network-&gt;XHR-&gt;Preview-&gt;content-&gt;positionResult-&gt;result</code>

<code>        </code><code>item.append(html[</code><code>'content'</code><code>][</code><code>'positionResult'</code><code>][</code><code>'result'</code><code>][i][</code><code>'positionName'</code><code>])</code>

<code>        </code><code>item.append(html[</code><code>'content'</code><code>][</code><code>'positionResult'</code><code>][</code><code>'result'</code><code>][i][</code><code>'companyFullName'</code><code>])</code>

<code>        </code><code>item.append(html[</code><code>'content'</code><code>][</code><code>'positionResult'</code><code>][</code><code>'result'</code><code>][i][</code><code>'salary'</code><code>])</code>

<code>        </code><code>item.append(html[</code><code>'content'</code><code>][</code><code>'positionResult'</code><code>][</code><code>'result'</code><code>][i][</code><code>'city'</code><code>])</code>

<code>        </code><code>item.append(html[</code><code>'content'</code><code>][</code><code>'positionResult'</code><code>][</code><code>'result'</code><code>][i][</code><code>'positionAdvantage'</code><code>])</code>

<code>        </code><code>item.append(html[</code><code>'content'</code><code>][</code><code>'positionResult'</code><code>][</code><code>'result'</code><code>][i][</code><code>'companyLabelList'</code><code>])</code>

<code>        </code><code>item.append(html[</code><code>'content'</code><code>][</code><code>'positionResult'</code><code>][</code><code>'result'</code><code>][i][</code><code>'firstType'</code><code>])</code>

<code>        </code><code>items.append(item)</code>

<code>        </code><code>#print items</code>

<code>    </code><code>return</code> <code>items</code>

<code>def</code> <code>excel_write(items):</code>

<code>    </code><code>newTable </code><code>=</code> <code>'test.xls'</code>

<code>    </code><code>wb </code><code>=</code> <code>xlwt.Workbook(encoding</code><code>=</code><code>'utf-8'</code><code>)  </code><code>#建立表格檔案</code>

<code>    </code><code>ws </code><code>=</code> <code>wb.add_sheet(</code><code>'test1'</code><code>)  </code><code>#建立表</code>

<code>    </code><code>headData </code><code>=</code> <code>[</code><code>'招聘職位'</code><code>,</code><code>'公司'</code><code>,</code><code>'薪資'</code><code>,</code><code>'地區'</code><code>,</code><code>'福利'</code><code>,</code><code>'提供條件'</code><code>,</code><code>'工作類型'</code><code>]   </code><code>#定義表格首行資訊</code>

<code>    </code><code>for</code> <code>hd </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>7</code><code>):</code>

<code>        </code><code>ws.write(</code><code>0</code><code>,hd,headData[hd],xlwt.easyxf(</code><code>'font: bold on'</code><code>))  </code><code>#0行 hd列</code>

<code>    </code><code>#寫資料</code>

<code>    </code><code>index </code><code>=</code> <code>1</code> <code>#從第二行開始寫</code>

<code>    </code><code>for</code> <code>item </code><code>in</code> <code>items:</code>

<code>        </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>7</code><code>):</code>

<code>            </code><code>print</code> <code>item[i]</code>

<code>            </code><code>ws.write(index,i,item[i])</code>

<code>        </code><code>index </code><code>+</code><code>=</code><code>1</code>

<code>        </code><code>#print index</code>

<code>        </code><code>wb.save(newTable)  </code><code>#儲存資料</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>"__main__"</code><code>:</code>

<code>    </code><code>for</code> <code>pn </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>,</code><code>5</code><code>): </code><code>#爬取1-5頁職位</code>

<code>        </code><code>items </code><code>=</code> <code>get_content(pn)</code>

<code>        </code><code>excel_write(items)</code>

執行後,會在腳本同目錄下生成一個 test.xls 表格,表格内容如下:

<a href="https://s3.51cto.com/wyfs02/M02/97/1B/wKiom1kpFFGT4sAsAAI-v1ixmOg933.png" target="_blank"></a>

說明:需要安裝三個子產品

1、requests:請求頁面

2、xlwt:寫入表格(讀取表格需要xlrd子產品)

3、pyopenssl:不安裝會報如下錯誤

C:\Python27\lib\requests\packages\urllib3\util\ssl_.py:335: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

  SNIMissingWarning

C:\Python27\lib\requests\packages\urllib3\util\ssl_.py:133: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

  InsecurePlatformWarning

      本文轉自M四月天 51CTO部落格,原文連結:http://blog.51cto.com/msiyuetian/1930193,如需轉載請自行聯系原作者