1.伪装自己-请求头:使用fake-useragent数据包,用其中的User-Agent伪装自己的用户信息;
2.urllib的底层原理
2.1requests模块
基本请求
- req = requests.get("http://www.baidu.com"),与urlopen()一样的效果,结果返回一个响应值,常用里面的req.text查看返回二点信息;
import requests from fake_useragent import UserAgent def test_get(): url = 'http://www.baidu.com/s' headers = {'User-Agent':UserAgent().chrome} # 构建传递的参数 params1 = {'wd':'python爬虫'} # 发送请求 resp = requests.get(url,headers= headers,params=params1) # 打印结果 print(resp.text[:1500])
- req = requests.post("http://www.baidu.com"),常用于登录状态,需要用户密码和名称发送请求时需要加入data数据;
3.设置超时时间:可以通过timeout属性设置超时时间,一旦超过这个时间还没获得响应内容,就会提示错误
requests.get('http://github.com', timeout=0.001)
4.session自动保存cookies,seesion的意思是保持一个会话,比如 登陆后继续操作(记录身份信息) 而requests是单次请求的请求,身份信息不会被记录
# 创建一个session对象
s = requests.Session()
# 用session对象发出get请求,设置cookies
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
5.ssl验证
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings()
resp = requests.get(url, verify=False, headers=headers)
3.代理网站;对于某些网站,在测试的时候请求几次,能正常获取内容。但是一旦开始大规模、频繁地爬取,网站可能会弹出验证码,或者跳转到登录验证页面,更有甚者可能会直接封禁客户端的IP,导致一定时间内无法访问。为了防止这种情况,我们需要使用代理来解决这个问题,这就需要用到proxies参数
-
小象代理
-
66ip 代理 http://www.66ip.cn
4.数据解析-正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
4.1定位符
4.2限定符
4.3特殊字符
4.4非打印字符
4.5数量词的贪婪模式与非贪婪模式
正则表达式通常用于在文本中查找匹配的字符串 Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;
非贪婪的则相反,总是尝试匹配尽可能少的字符
例如:正则表达式”ab”如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词”ab?”,将找到”a”
5.Python使用正则
常用方法
实战-腾讯新闻
import re
import requests
from fake_useragent import UserAgent
url = 'https://sports.qq.com/'
# 构建请求头信息
headers = {'User-Agent':UserAgent().chrome}
# 发送请求
resp = requests.get(url,headers=headers)
# 设置字符集
resp.encoding ='gbk'
# # 保存数据
# with open('tmp.html','w',encoding='utf-8') as f:
# f.write(resp.text)
# 匹配数据
rs = re.findall(r'<li><a target="_blank" href=".+>(.+)</a></li>',resp.text)
# re.findall(r'<li><a target="_blank" href=".+?>(.+)</a>',resp.text)
for r in rs:
print(r)