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

邵奈一来了 2021-07-20 04:07:06
python开发 python教程


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

  • 1.

2、导入包

import random

  • 1.

如果需要导入包的特定模块,并重命名,则可如下所示:
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]

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

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

4、定义函数

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

  • 1.
  • 2.

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

5、for循环

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

  • 1.
  • 2.
  • 3.

任意取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])

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

随机取一个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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

代码解释:
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)

  • 1.
  • 2.
  • 3.

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 | 简书 |

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


版权声明
本文为[邵奈一来了]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_12564104/2893055

  1. 【推荐】常见的Python数据可视化库
  2. 基于Python3.3+Selenium3.0框架实战Web自动化测试实战(百度网站实测项目)
  3. 【django轻量级框架】用Mysql的各种项目响应速度慢?一招解决!
  4. 【django轻量级框架】Django项目导入css,js,images等静态文件
  5. 【django轻量级框架】HTML上传文件拦截到本地
  6. 【深度学习入门到精通系列】留一交叉验证法Python实现(看不懂你来打我~!)
  7. Python机器学习笔记:sklearn库的学习
  8. python【Opencv计算机视觉库】opencv模块cv2常用函数用法(全)
  9. python基础练习(七)
  10. python基础练习(八)
  11. python基础练习(九)
  12. python基础练习(十)
  13. python新增练习(一)
  14. python新增练习(二)
  15. python新增练习(三)
  16. Python中的排序sorted(d.items(), key=lambda x: x[1])
  17. python 判断字母大小写
  18. python绘制科赫雪花(递归)
  19. 解决cmd命令查看python版本“python不是内部命令或外部命令,也不是可执行程序解决方案”的问题
  20. Python Numpy介绍
  21. python —pandas库常用函数
  22. Python应用matplotlib绘图简介
  23. Python matplotlib高级绘图详解
  24. 入门训练 Fibonacci数列-python实现
  25. Python -二维数组定义
  26. python二进制相加
  27. Python文本处理:解析json格式的数据
  28. 查看python安装路径
  29. Python编程之计算生态
  30. Python-turtle标准库知识小结(python绘图工具)
  31. Python-time标准库知识小结
  32. Python-random标准库知识小结
  33. python安装第三方库的三种方法
  34. python程序的控制结构
  35. Python程序的函数和代码复用
  36. python之组合数据类型
  37. python【力扣LeetCode算法题库】300 最长上升子序列(动态规划)
  38. python【力扣LeetCode算法题库】695- 岛屿的最大面积(深搜)
  39. python【力扣LeetCode算法题库】面试题 01.06-字符串压缩
  40. python【力扣LeetCode算法题库】1160-拼写单词
  41. python【力扣LeetCode算法题库】836- 矩形重叠
  42. python【力扣LeetCode算法题库】409-最长回文串(数学 计数器)
  43. python【力扣LeetCode算法题库】面试题40- 最小的k个数
  44. python【力扣LeetCode算法题库】945- 使数组唯一的最小增量
  45. python【力扣LeetCode算法题库】365- 水壶问题(裴蜀等式)
  46. python【力扣LeetCode算法题库】876- 链表的中间结点
  47. python【力扣LeetCode算法题库】面试题 17.16- 按摩师(DP)
  48. python【力扣LeetCode算法题库】892-三维形体的表面积
  49. python【力扣LeetCode算法题库】999-车的可用捕获量(DFS)
  50. python【力扣LeetCode算法题库】914. 卡牌分组(reduce & collections.Counter)
  51. python【力扣LeetCode算法题库】820- 单词的压缩编码
  52. python【力扣LeetCode算法题库】1162- 地图分析(BFS)
  53. python【力扣LeetCode算法题库】面试题62- 圆圈中最后剩下的数字(约瑟夫环)
  54. python【力扣LeetCode算法题库】912- 排序数组
  55. python【力扣LeetCode算法题库】1111- 有效括号的嵌套深度
  56. python【力扣LeetCode算法题库】289- 生命游戏
  57. python【力扣LeetCode算法题库】12- 整数转罗马数字(打表 模拟)
  58. python【数据结构与算法】内置函数enumerate(枚举) 函数(看不懂你来打我)
  59. python【力扣LeetCode算法题库】13- 罗马数字转整数
  60. python【数据结构与算法】内置函数 zip() 函数(看不懂你来打我)