天天看点

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,如需转载请自行联系原作者