Python 爬虫解析器之 Beautiful Soup



Beautiful Soup 是 html/xml 的 python 解析器, 可以定位 DOM 元素信息.

该工具在爬虫阶段 中, 处于解析网页阶段, 可以简化正则表达式, 简单示例:

>>> from bs4 import BeautifulSoup as BS
>>> from urllib.request import urlopen
>>> soup = BS(urlopen('https://www.alipay.com/'))
>>> soup.title
<title>支付宝 知托付!</title>

1. 安装

pip 安装

pip install beautifulsoup4

阅读全文 »


Python 简单爬虫



什么是爬虫


爬虫指的系统性抓取网络页面的网络机器人。原理图如下:

crawler

上图涉及了爬虫的任务调度控制,多线程,存储机制等,本文不会涉及。

阅读全文 »


近期笔记



网商工具平台 将近期Coding时需要谷歌的点,记录一下,主要是 Python Flask Jquery 方面

Python

Python 正则

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。

正则表达式实例

  1. 字符类
实例 描述
[Pp]ython 匹配 “Python” 或 “python”
rub[ye] 匹配 “ruby” 或 “rube”
[aeiou] 匹配中括号内的任意一个字母
[0-9] 匹配任何数字。类似于 [0123456789]
[a-z] 匹配任何小写字母
[A-Z] 匹配任何大写字母
[a-zA-Z0-9] 匹配任何字母及数字
[^aeiou] 除了aeiou字母以外的所有字符
[^0-9] 匹配除了数字外的字符
  1. 特殊字符类
实例 描述
. 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式
\d 匹配一个数字字符。等价于 [0-9]
\D 匹配一个非数字字符。等价于 [^0-9]
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’
\W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’  

re.match && re.search

re.match(pattern, string, flags=0)

re.search(pattern, string, flags=0)

阅读全文 »


Python Notes



本文内容来自,慕课网廖老师 Python 课程,地址: http://www.imooc.com/learn/317

#高阶函数

将函数当做入参:

def half(c): return c / 2.0
def test(a, b, c):
    return c(a) + c(b)
print(test(2, 8, half))  

##Map

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

阅读全文 »


用 Python 玩测试



Python 库这么多,测试库肯定也是丰富无比。官网给出了Python测试框架的列表 PythonTestingToolsTaxonomy , 常见的比如 unittest nose mock Selenium 等。本文简单了解一下 Python 的测试~

单元测试 unittest

首先,给出, unittest 文档地址 https://docs.python.org/4.5/library/unittest.html, 具体用法,就不翻译了,查查文档就行。

第一句话就乐了, unittest 是借鉴 Junit 实现的。

The unittest unit testing framework was originally inspired by JUnit and has a similar flavor as major unit testing frameworks in other languages.

unittest 支持以下四种方式:

  • test fixture
  • test case
  • test suite
  • test runner

关系

首先是要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,整个过程集成在unittest.main模块中。

unittest Demo

import unittest

class TestStringMethods(unittest.TestCase):

  def test_upper(self):
      self.assertEqual('foo'.upper(), 'FOO')

  def test_isupper(self):
      self.assertTrue('FOO'.isupper())
      self.assertFalse('Foo'.isupper())

  def test_split(self):
      s = 'hello world'
      self.assertEqual(s.split(), ['hello', 'world'])
      # check that s.split fails when the separator is not a string
      with self.assertRaises(TypeError):
          s.split(2)
  @unittest.skip("demonstrating skipping")
  def test_nothing(self):
      self.fail("shouldn't happen")

  @unittest.skipIf(mylib.__version__ < (1, 3),
                   "not supported in this library version")
  def test_format(self):
      # Tests that work for only a certain version of the library.
      pass

  @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
  def test_windows_support(self):
      # windows specific testing code
      pass
        
if __name__ == '__main__':
    unittest.main()

##参考文档

1. Python单元测试——深入理解unittest

阅读全文 »