0.知识点简要回顾
一.爬虫的过程 1. 需求,确定有需求的人到底想要什么 2. 根据需求寻找网站 3. 网站数据获取到本地(urllib,requests) 4. 定位数据(正则,xpath,json) 5. 存储(数据库,磁盘,网络发送)(mysql,redis,文件)6.反爬虫:其他公司不想让我们获取他们的数据,通过HTTP请求头,请求频率(通过判断是不是同一个ip,投毒:一直给你假数据),判断是否是爬虫程序7.发送请求 (HTTP) 1.我是谁,我找谁 (url) 2.名字 (User-Agent: (HTTP请求的名字) 1.py版本 2.urllib) 3.介绍信息 (referer:介绍人,从哪个页面跳转到我的页面,要跳转的地方就是我请求的页面) 4.你有没有来过 (cookie:返回信息,标识你来过) 返回响应 (response)8.获取webserver的返回信息 1.url 2.接口设计,response = openurl(url) 3.存储response
1.requests 的get用法(resposne.content 相当于 response.read())
import requests url = 'http://www.baidu.com' response = requests.get(url) with open('baidu.html', 'wb') as f: # response = urllib.request.urlopen(url) f.write(response.content)
2. requests 的post用法
import requests import json # 1. url url = 'http://fanyi.baidu.com/sug' # 2. form/ data/ body def translate(kw): form = { 'kw': kw } response = requests.post(url, data=form) # str = response.content.decode('utf-8/gbk/gb2312/gb18080') = response.encoding = 'utf-8/gbk/gb2312/gb18080' #指定可用的编码格式 str = response.text # 4. 解析json res_dict = json.loads(response.text) # 5. 打印翻译结果 #print(res_dict) result = res_dict['data'][0]['v'] return result if __name__ == '__main__': res = translate('天气') print(res)
3. mysql 测试,mysql_coon 主要的功能就是, 将链接数据库的操作变成只连接一次。
import pymysql class mysql_conn(object): # 魔术方法,构造函数:初始化魔术方法。触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中)。参数:至少有一个self接收对象。返回值:无。作用:初始化对象的成员。注意:使用该方式初始化的成员都是直接写入对象当中,类中无法具有。 def __init__(self): self.db = pymysql.connect(host='127.0.0.1', user='root', password='abc123', port=3306, database='py1011') self.cursor = self.db.cursor() # 执行modify(修改)相关的操作 def execute_modify_mysql(self, sql): self.cursor.execute(sql) self.db.commit() # 魔术方法, 析构化 ,析构魔术方法。触发时机:当对象没有用(没有任何变量引用)的时候被触发。参数:一个self接收对象。返回值:无。作用:使用完对象时回收资源,注意:del不一定会触发当前方法,只有当前对象没有任何变量接收时才会触发。 def __del__(self): self.cursor.close() self.db.close() if __name__ == '__main__': sql = 'insert into xueqiu_test values (3)' mc = mysql_conn() mc.execute_modify_mysql(sql) sql = 'insert into xueqiu_test values (4)' mc.execute_modify_mysql(sql) sql = 'insert into xueqiu_test values (5)' mc.execute_modify_mysql(sql) sql = 'insert into xueqiu_test values (6)' mc.execute_modify_mysql(sql)
4. 正则
1.(用match)正则需从头开始匹配 ,匹配内容开头必须相同,否则匹配失败 2. ".":可以匹配除换行符外的任意字符 3.(以h开头后面必须跟着一个“.”--》‘h\.’):‘h1111’,‘h.111’。前者匹配失败,后者匹配成功,反斜杠:转义字符,取消其之后符号的特殊意义,字符串形式输出(原样输出) 4.‘h\\\\’--> 计算机将其识别成 ‘h\\’的字符串(两个反斜杠‘\’会被计算机识别成一个反斜杠),前一个\是转义字符,打印出来是‘h\’ 5.$:结束符,比如‘h.$’: ‘h’后面只能跟着一个字符,之后必须结束,长度只能是 2 6. ‘\d’:匹配任意0-9的数字,‘*’:前面所匹配的东西,匹配次数0-n次