爬虫(4)

1.伪装自己-请求头:使用fake-useragent数据包,用其中的User-Agent伪装自己的用户信息;

2.urllib的底层原理

2.1requests模块

基本请求
  1. 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])
    
  2. 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参数

4.数据解析-正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式在线测试 | 菜鸟工具 (runoob.com)

正则表达式在线测试 | 菜鸟工具

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)

  • 21
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值