【邵奈一】Python爬虫专栏(一)之Python爬虫热身

教程目录

  • 0x00 教程内容
  • 0x01 Python环境准备
          • 1. Windows环境
          • 2. MacOS环境
  • 0x02 Python语法熟悉
          • 1. Python模拟日志生成例子
          • 2. 语法示例
          • 3. 数据类型
  • 0x03 爬虫初体验
  • 0xFF 总结

0x00 教程内容

  1. 为什么要学习Python
  2. 学会安装好Python环境
  3. 熟悉Python的语法
  4. Python爬虫初体验

学习前提:
1、需要有编程基础,可以不熟悉Python。

0x01 Python环境准备

1. Windows环境

步骤非常简单,在此不详细展开。
请参考教程:Python3的安装(Windows)

2. MacOS环境

MacOS一般都会自带2.X版本的Python,一般都额外装一个Python3版本。
操作有Windows版本类似,此处不再详细说明,自己可找教程。

0x02 Python语法熟悉

1. Python模拟日志生成例子

代码及演示教程:Python模拟日志生成

2. 语法示例

1、设置字符集

#coding=UTF-8

2、导入包

import random

如果需要导入包的特定模块,并重命名,则可如下所示:
from pyquery import PyQuery as pq

3、定义数组

url_paths = [
    "article/112.html",
    "article/113.html",
    "article/114.html",
    "article/115.html",
    "article/116.html",
    "article/117.html",
    "article/118.html",
    "article/119.html",
    "video/821",
    "tag/list"
]

ip_splices = [102,71,145,33,67,54,164,121]

数组最后一个元素不需要加英文逗号,字符串与其他语言一样,用双引号括起来。

4、定义函数

def sample_url():
    return random.sample(url_paths,1)[0]

函数体只需要在函数名右边加上冒号:即可,Python语言必须要有缩进,函数体的范围就是根据缩进来确认的。

5、for循环

def sample_ip():
    splice = random.sample(ip_splices,4)
    return ".".join([str(item) for item in splice])

任意取ip_splices里的四个数字,转成字符串,并用点.连接起来。

def sample_referer():
    if random.uniform(0, 1) > 0.2:
        return "-"
    refer_str = random.sample(http_referers, 1)
    query_str = random.sample(search_keyword, 1)
    return refer_str[0].format(query=query_str[0])

随机取一个http_referers,如取到了:https://www.baidu.com/s?wd={query},再随机取一个query_str,如:Docker搭建Spark集群(实践篇),然后通过format方法,将query_str赋值到{query}里,最终将会得到类似于这样的结果:https://www.baidu.com/s?wd=Docker搭建Spark集群(实践篇)。此处需要注意的是random.sample(http_referers, 1)取到的是一个数组,所以,之后使用的时候,还需要取到里面的值,如:refer_str[0]

def generate_log(count = 10):

    time_str = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())

    f = open("D:\\python-logs.txt","w+")

    while count >= 1:
        generate_log = "{ip}\t{localtime}\t \"GET /{url} HTTP/1.1 \" \t{referer}\t{code}".format(
            url = sample_url(),
            ip = sample_ip(),
            referer = sample_referer(),
            code = sample_status_code(),
            localtime = time_str
            )
        print generate_log
        f.write(generate_log + "\n")
        count = count - 1

代码解释:
1、time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()),time.localtime()为获取本地时间,然后按照特定的格式进行格式化。

strftime()参考教程:Python time strftime()方法

2、f = open("D:\\python-logs.txt","w+"),新建一个文件fw+的意思是:表示权限为可读可写,如果待打开文件已存在,会先清空,不存在则创建。

open()参考教程:Python中的open()方法总结

3、print generate_log,打印输出

4、f.write(generate_log + "\n"),写到f文件里。

# URL    IP信息        referer        状态码    日志访问时间
if __name__ == '__main__':
    generate_log(100)

main函数,主方法。

3. 数据类型

1、Python有五个标准的数据类型

Numbers(数字)
String(字符串)
List(列表)
Tuple(元组)
Dictionary(字典)

Python支持四种不同的数字类型:

int(有符号整型)
long(长整型[也可以代表八进制和十六进制])
float(浮点型)
complex(复数)

注意:在Python 2.2 以后的版本中,int 类型数据溢出后会自动转为long类型。long 类型只存在于 Python2.X 版本中,在 Python3.X 版本中 long 类型被移除了,使用 int 替代。

0x03 爬虫初体验

  1. 体验教程:Python第一个爬虫项目
  2. 补充知识:

!/usr/bin/python#!/usr/bin/env python的区别是?

#!/usr/bin/python指去/usr/bin/目录下找python执行
#!/usr/bin/env python指去#!/usr/bin/env中找到python的安装路径,然后去执行它,此处可执行的python路径不管是不是在/usr/bin下都行,用法比较灵活,而#!/usr/bin/python就写成了绝对路径,只能去/usr/bin下找。
结论推荐使用 #!/usr/bin/env python

0xFF 总结

  1. 本专栏不是小白教程,需要有编程基础,甚至需要一点Python基础。
  2. 实战性强,不拖泥带水,请点赞、评论、收藏,继续往下面学。

作者简介:邵奈一
全栈工程师、市场洞察者、专栏编辑
| 公众号 | 微信 | 微博 | CSDN | 简书 |

福利:
邵奈一的技术博客导航
邵奈一 原创不易,如转载请标明出处。


你可能感兴趣的:(python,python,爬虫)