Python 爬虫基础

Python 爬虫基础

爬虫的用处

  1. 采集数据
  2. 模拟操作

爬虫的原理与过程

1.Http的请求与响应

通过Http的请求,获取网页响应内容。

2.响应内容处理

获取响应内容,通过etree,正则表达式和json等技术处理响应,取得想要的内容。

3.数据的存储

通过数据库,文本,Excel等各种方式存储数据。

数据库可选:如果数据量庞大使用mysql,sqlserver等体量大的数据,如果数据量小可使用sqllite

具体脚本代码

import requests
requests.get(url="") # get请求
requests.post()# post请求

通过上述代码可以通过get/post请求网址数据

常用参数:

url: 网址字符串 例:https://xxxx.xx/
params: 网址参数 格式 dict 例:parm = { "name": "python": "age": 12 }
		get: 生成到链接后作为参数,使用&链接 例:https://xxxx.xx?name=python&age=12
    	post: 生成到post的表单内
headers: 请求头设置  格式 dict 例:headers = { "User-Agent" : "Mozilla/5.0 (Linux; Android 10; V1922A Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045329 Mobile Safari/537.36 MMWEBID/7991 MicroMessenger/7.0.18.1740(0x27001235) Process/tools WeChat/arm64 NetType/WIFI Language/zh_CN ABI/arm64","Host": "baidu.com" }
verify: 是否跳过HTTPS证书验证  格式 bool

获取响应

content = requests.get().content # 响应内容
# requests.get() 返回值是http响应的各项值,其中content/text可以获取响应文本
text = content.decode('utf-8', 'ignore')
# content 是编码后的内容,如果想看到正常的文本,要解码后才可以,'utf-8'是常用的编码格式,具体要看访问的网站使用的是何种编码格式,'ignore'用来忽略解码后出现异常的文本内容。

响应的分类

  1. document
  2. media(video、audio,image)
  3. json
  4. js(file)

一般情况下我们是知道要爬取的网址对应的是哪种相应类型,可以直接针对处理

ducment
content = requests.get().content.decode('utf-8', 'ignore')
# content内容即为相应内容
media
response = requests.get()
# 获取响应
# 读取响应中的Filename
content = response
# 创建对应文件名的文件,然后将content写入文件
json
import json
content = requests.get().content.decode('utf-8', 'ignore')
obj = json.loads(content)
# 获取content json字符串
# 引入json包,使用json.loads(content) 可以将json字符串转为dict格式的json对象,方便获取数据
js

如果只要Js文件的内容,可以像document那样使用,如果想要爬取文件,使用media的方法即可。

Document响应的数据获取

lxml.etree XPath
from lxml import etree
import requests
content = requests.get().content.decode('utf-8', 'ignore')
tree = etree.HTML(content) # 获取etree对象
tree_list = tree.xpath('指定内容的xpath路径') #获取指定路径的内容或xpath对象列表
result = tree_list[0] #要找的内容,如果tree_list的长度为0,则说明xpath不对,或者响应本身没有对应路径
# xpath的具体使用方法可自行网上查找
re 正则表达式
import re, requests
content = requests.get().content.decode('utf-8', 'ignore')
arr = re.compile("").findall(content)
# compile("") 参数为正则表达式 例:content = "123456789", 参数="123(.*?)789",返回的内容arr=["456"],返回的是符合条件的结果集合

反爬的原理及破解

不管是要爬别人的网站还是防止别人爬自己的网站,反爬是必须要了解的。

请求头

我们请求http链接的时候会有一个请求头header,网站后端处理请求的时候可以读取到请求头。

网站会验证及限制header中的部分参数来判断是否为爬虫。

1.User-Agent(用户代理)

这个参数会带出访问网页的设备及浏览器的型号。爬虫的时候如果不设置,会自动识别为爬虫的类型。

解决方案: 设置User-Agent,可以收集大量User-Agent,创建UserAgent获取的方法,每次请求或多次请求后更改User-Agent来破解反爬规则。

2.Host(请求宿主)

访问链接时的网页host,如果爬虫不设置,则为空。

解决方案:针对特定的有host需求的请求,加上对应的Host

IP

同一IP频繁访问,会被网站后端检测,从而加入黑名单限制一个时间段,或者永久不能访问。

解决方案:加上时间延迟,或者使用代理IP,代理IP被封后更换即可

requests.proxies({"http": "", "https": ""})
# 代理IP网上找或者自己购买

Cookie

有时我们爬取数据是通过访问多个链接来获取的,而访问第二个链接的时候可能会需要带上第一个请求返回的cookie值。

requests.get().cookies
# 获取返回的cookie字典,下次请求带上即可
# headers = { "cookie": "a=1;b=2;"}

登录状态保持

登录类型

  1. 存储在cookie中(浏览器前端)
  2. 存储在session中,session信息保存在cookie中(服务器后端)

保持方式

  1. 调用登录请求后,获取cookie信息,并在后续的请求中带上。

  2. 使用requests.session()

    requests.session()
    # 返回值类型和requests对象相同,不同的是,此对象在后续请求中会自动添加或更新响应中的cookie信息,不需要专门写cookie
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxguang_tao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值