# coding=utf-8
import requests
import json
from retrying import retry
import re

class TyY:

  def __init__(self):
    self.url = ["http://www.tylaw.cn/cgi-bin/GLaw.dll?DispInfo&nid={}".format(i) for i in range(3723, 3752)]
    self.headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"
    }

  @retry(stop_max_attempt_number=3) # 设置最大请求连接数
  def _parse_url(self, url):

    response = requests.get(url, headers=self.headers, timeout=3)
    assert response.status_code == 200
    response.encoding = "gb2312"
    return response.text

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

  def get_content_list(self, html):
    content_list = []
    item = {}

    item['name'] = re.findall(r"<p align='center' class='titlc'>.*?律师:(.*?)简介.*?</p>", html, re.S)[0] if len(re.findall(r"<p align='center' class='titlc'>.*?律师:(.*?)简介.*?</p>", html, re.S)) > 0 else None
    item['email'] = re.findall(r"<div class='contc'>.*?【电子信箱】(.*?) </div>", html, re.S)[0] if len(re.findall(r"<div class='contc'>.*?【电子信箱】(.*?) </div>", html, re.S)) > 0 else None
    content_list.append(item)

    # print(item)
    return content_list

  def save_content(self, content_list):
    with open("tyy.json", "a") as f:
      for content in content_list:
        json.dump(content, f, ensure_ascii=False)
        f.write(',\n')

  def run(self):
    url_list = self.url
    for url in url_list:
      html = self.parse_url(url)
      content_list = self.get_content_list(html)
      self.save_content(content_list)


if __name__ == '__main__':
tyy = TyY()
tyy.run()

python3 re正则匹配数据获取案例的更多相关文章

  1. Python3正则匹配re.split,re.finditer及re.findall函数用法详解

    这篇文章主要介绍了Python3正则匹配re.split,re.finditer及re.findall函数用法,结合实例形式详细分析了正则匹配re.split,re.finditer及re.finda ...

  2. python3 正则匹配[^abc]和(?!abc)的区别(把多个字符作为一个整体匹配排除)

    目的:把数字后面不为abc的字符串找出来 如1ab符合要求,2abc不符合要求 str = '1ab' out = re.match(r'\d+(?!abc)',str) str1 = '1abc' ...

  3. python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法

    python_way day18 html-day4 1.Django-路由系统   - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...

  4. 正则匹配<img src="xxxxxx" alt="" />标签的相关写法

    1.(<img\ssrc[^>]*>) 2.content.replace(/<img [^>]*src=['"]([^'"]+)[^>]*&g ...

  5. Python3中正则模块re.compile、re.match及re.search函数用法详解

    Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表 ...

  6. python中正则匹配之re模块

    Python中正则表达式 re:re是提供正则表达式匹配操作的模块 一.什么是正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某个模式匹配,Python 自1.5版本起 ...

  7. 正则匹配闭合HTML标签(支持嵌套)

    任何复杂的正则表达式都是由简单的子表达式组成的,要想写出复杂的正则来,一方面需要有化繁为简的功底,另外一方面,我们需要从正则引擎的角度去思考问题.关于正则引擎的原理,推荐<Mastering R ...

  8. 正则匹配抓取input 隐藏输入项和 <td>标签内的内容

    这里不多作解释了,只要提供方法,如果想了解正则匹配,就去百度. 第一条是,匹配出所有的隐藏输入域 $patern = "/<input(.*?)type=\"hidden\& ...

  9. js正则匹配的一个日常应用

    应用实例 1 /** 将段落中的 \n 转换为 <p></p>, 规范存储 */ 2 function formatParagraphForStore(val) { 3 var ...

随机推荐

  1. 经典算法研究系列:二、Dijkstra 算法初探

    July   二零一一年一月 本文主要参考:算法导论 第二版.维基百科. 一.Dijkstra 算法的介绍 Dijkstra 算法,又叫迪科斯彻算法(Dijkstra),算法解决的是有向图中单个源点到 ...

  2. 前端基础之JavaScript

    什么是JavaScript? JavaScript,也称ECMAScript,是一种基于对象和事件驱动并具有相对安全性并广泛用于客户端网页开发的脚本语言,同时也是一种广泛用于客户端Web开发的脚本语言 ...

  3. html阶段测试

    1.简述src和href的区别? 2.在html页面的head中定义属性<meta http-equiv="X-UA-Compatible" content="IE ...

  4. sqlserver 2005连接超时采用bat命令解决

    将以下内容保存为 openSql.bat 双击运行即可 @echo ========= SQL Server Ports =================== @echo Enabling SQLS ...

  5. UWP 唤起应用商城,邮件

    UWP做到收尾工作的时候,一般需要在应用内做一个关于页面,用于放你的邮箱链接,商店评论链接等.. 一:打开链接 打开链接有两种做法 1.用 HyperlinkButton  (超链接按钮)这个控件,给 ...

  6. SSH/HTTPS安全的本质都依赖于TLS/SSL

    1.SSH/HTTPS的安全本质是TLS/SSL. 2.1990年互联网上的网页主要是静态内容,作为信息发布,使用HTTP明文传输是可以的.不过,后来很多公司开始使用网页进行金融交易,例如:股票,于是 ...

  7. 使用下一代web开发框架koa2搭建自己的轻服务器

    Koa 是由 Express 原班人马亲情打造的新一代web框架.既然已经有 Express 了,为什么又要搞一个Koa出来呢?因为 Koa 相比 Express 体积更小,代码更健壮,作用更纯粹. ...

  8. Codeforces A. Trip For Meal

    A. Trip For Meal time limit per test 1 second memory limit per test 512 megabytes input standard inp ...

  9. linux下开机不自动挂载指定分区

    我的debian装好后,有保留windows,但是却不想在debian启动后桌面上,文件管理器中显示windows分区,留个记录在这里,需要的时候方便查看 使用mount 的 noauto参数: 创建 ...

  10. vue2.0 练习项目-外卖APP(1)

    前言 vue这个框架现在挺流行的,作为一个专注前端100年的代码爱好者,学习下路径流行的框架是必须的!在网上搜索vue的项目是比较少的,在官网进行了入门学后,没有一个项目练习巩固下,学了就等于没学,所 ...