爬虫之概述
概述
抓取网络资源的机器人
一、概述
1.定义
网络蜘蛛、网络机器人、抓取网络资源的程序
其实就是用python程序模拟人为点击浏览器并访问网站,而且模仿的月逼真越好
2. 目的
- 获取大量数据,用来做数据分析
- 公司项目的测试数据,公司业务所需数据
企业获取数据的方式
- 公司自有数据
- 第三方品台购买(数据堂、贵阳大数据交易所)
- 爬虫爬取数据(第三方平台没有或者价格太高)
3. 优势
- Python:请求模块、解析模块丰富成熟,强大的Scrapy网络爬虫框架
- PHP:对线程、异步支持不太好
- JAVA:代码笨重、代码量大
- C/C++:虽然效率高,但是代码成型慢
4. 分类
-
通用网络爬虫(搜索引擎使用,遵循robots协议)
robots协议:网站通过robots协议告诉搜索引擎哪些页面也可抓,哪些不能抓
通用网络爬虫需要遵循robots协议(君子协议)
-
聚焦网络爬虫:自己写的爬虫程序
二、编码问题
万能方法:
import requests
html = requests.get(url="http:www.cnblogs.com/chancey/")
html = html.content.decode("utf-8")
在Windows上新建的任何数据文件都是国标编码,而在Linux上创建的文件都是utf-8编码
互转方法
在Windows上
在Linux上
import csv
with open("test.csv", "w") as f:
writer = csv.writer(f)
# 写一行(列表嵌套)
writer.wrterow(["小明", 25])
# 写多行(列表里面嵌套元组)
writer.wrterows([("小红", 18), ("小黑", 20), ("小花", 36)])
import csv
with open("test.csv", "w") as f:
writer = csv.writer(f)
# 写一行
writer.writerow(["小明", 25])
writer.writerow(["小小", 7])
# 写多行
writer.writerows([("小红", 18), ("小黑", 20), ("小花", 36)])
writer.writerows([("小瓜", 18), ("小洋", 20), ("小菲", 36)])
如果将这段代码cv到Windows机器上,会出现如下的情况
莫名其妙会出现空行,改动代码,即添加参数即可
with open("demo.csv", "w", newline="") as f
三、持久化
四、基本思路
class Spider(object):
def __init__ (self:)
# 初始化所有变量
pass
def get_page (self):
# 获取源码
pass
def parse_page (self):
# 解析源码
pass
def write_page (self):
# 保存数据
pass
def main (self):
# 主函数
pass
if __name__ == "__main__":
spider = Spider()
spider.main()