0
点赞
收藏
分享

微信扫一扫

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

互联网码农 2022-01-31 阅读 90



教程目录


  • ​​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+")​​​,新建一个文件​​f​​​,​​w+​​的意思是:表示权限为可读可写,如果待打开文件已存在,会先清空,不存在则创建。

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. 实战性强,不拖泥带水,请点赞、评论、收藏,继续往下面学。

全栈工程师、市场洞察者、专栏编辑

| ​​公众号​​​ | ​​微信​​​ | ​​微博​​ | ​​简书​​ |

福利:

​​邵奈一的技术博客导航​​

​​邵奈一​​ 原创不易,如转载请标明出处。


举报

相关推荐

0 条评论