import requests
from retrying import retry
from lxml import etree
import json

class DaCheng(object):
  def __init__(self):

    self.temp_url = "http://www.dachengnet.com/cn/professionals?currentPageNo={}&"
    self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36"}

  def get_url_list(self):
    url_list = [self.temp_url.format(i) for i in range(1, 78)] # 使用列表推导式获取pageNo
    return url_list

  @retry(stop_max_attempt_number=3)
  def _parse_url(self, url):
    r = requests.get(url, headers=self.headers, timeout=3)
    assert r.status_code == 200
    return etree.HTML(r.content) # 返回一个xpath对象

  def parse_url(self, url):
    # print(url)
    try:
      html = self._parse_url(url)
    except:
      html = None
    return html

  def get_content_list(self, html):
    tr_list = html.xpath("//tbody/tr")
    content_list = []
    for tr in tr_list:
      item = dict()
      # 姓名
      item['Name'] = tr.xpath('./td[1]/a/text()')[0] if len(tr.xpath('./td[1]/a/text()')) > 0 else None
      # 邮箱
      item['Email'] = tr.xpath('./td[2]/text()')[0] if len(tr.xpath('./td[2]/text()')) > 0 else None
      # 职位
      item['Position'] = tr.xpath('./td[3]/text()')[0].strip().replace('\n', '').replace('\t', '') if len(
        tr.xpath('./td[3]/text()')) > 0 else None
      # 地点
      item['Location'] = tr.xpath('./td[4]/text()')[0].strip().replace('\n', '').replace('\t', '') if len(
        tr.xpath('./td[4]/text()')) > 0 else None
      content_list.append(item)
      # print(item)
      return content_list

  def save_content_list(self, content_list):
    with open('DaCheng.json', 'a') as f:
      for content in content_list:
        json.dump(content, f, ensure_ascii=False, indent=2)
        f.write(',\n')
        print('保存成功')

  def run(self):
    # 1.获取首页url
    url_list = self.get_url_list()
    # 2.循环发送请求,获取响应
    for url in url_list:
      html = self.parse_url(url)
      # 3.提取数据
      content_list = self.get_content_list(html)
      # 4.保存
      self.save_content_list(content_list)

if __name__ == '__main__':
dacheng = DaCheng()
dacheng.run()

最新文章

  1. 基于struts2和hibernate的分页实现
  2. Mysql数据库主从心得整理
  3. 冰球项目日志1-yjw
  4. Linux下搭建DNS服务器
  5. Nhibernate对应关系参数介绍
  6. linux ssh key配置方法
  7. 廖雪峰js教程笔记6 generator一个坑 看完python在回来填坑
  8. Oracle 游标使用
  9. java调用python代码
  10. ASP.NET 里的 JSON操作
  11. Linux/Unix里,ln -s
  12. Javascript模板引擎handlebars使用实例及技巧
  13. ubuntu 启用apache2 虚拟机配置
  14. C++ static与单例模式
  15. Spark入门(1-5)Spark统一了TableView和GraphView
  16. 将ActiveX打包成CAB发布的注意事项
  17. (python)面向对象
  18. 微信小程序顶部(navigationBar)设置为透明
  19. The Little Prince-12/08
  20. 2017-2018-2 20155203《网络对抗技术》 Exp7:网络欺诈防范

热门文章

  1. ThinkPHP5高阶实战教程
  2. 使用javaAPI操作hdfs
  3. 《算法导论》学习总结 — XX.第23章 最小生成树
  4. 在Ubuntu终端彻底删除软件
  5. spring 内部工作机制(一)
  6. jvm内存模型的理解
  7. ZOJ 2002 Copying Books 二分 贪心
  8. 自动化双向数据绑定AngularJs---入门
  9. $http设置headers来实现IE不缓存url请求的资源
  10. UWP 绘制图形