python 爬虫

一 爬虫介绍

1 什么是爬虫
网络爬虫式一种按照一定的规则。自动地抓取万维网信息的程序或者脚本
2 web与http协议介绍
在这里插入图片描述
超文本阐述协议是应用层协议。
HTTP是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器街道请求后,给予响应的响应信息
3 爬虫的流程步骤
确定需求、寻找需求、发送请求、解析数据、存储数据
4 环境
python 3.7
IDE 略

二 网络请求

1 requests库的基本使用
环境配置 pip3 install requests
requests.get(url) # GET请求
requests.post(url) # POST请求
r.encoding #获取当前的编码
r.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
r.content #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
r.ok # 查看r.ok的布尔值便可以知道是否登陆成功
#特殊方法#
r.json() #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
r.raise_for_status() #失败请求(非200响应)抛出异常
r.apparent_encoding 从内容分析出响应内容的编码格式
r.raise_for_status() # 如果状态码不是200, 引发HttpError异常
2 GET & POST
GET是默认的HTTP请求方式,用于直接输入网址的方式访问网页
POST方法主要是向web服务器提交表单数据,通常表单提交时采用POST方法
GET把请求参数包含在URL中,POST通过请求体传递参数
GET相对POST不安全,参数直接暴露在URL上
3 requests使用代理IP
身份的验证
4 requests处理cookie信息
http请求是无状态的请求协议,不会记住用户的状态和信息,也不清楚你在这之前访问了什么,因为网站需要记录用户释放登录时,就需要在用户登录后创建一些信息,并且要把这些信息记录在当前用户的浏览器中,记录的内容就是cookie,用户使用当前的这个浏览器继续访问这个服务器时,会主动携带这个网站设置的cookie信息。
cookie会在浏览器中记录信息,并且在访问时携带这个信息,
1 浏览器更换或删除cookie后,信息丢失
2 cookie在浏览器中记录的信息是不安全的,因为不能记录敏感信息

session 是在服务器端进行数据记录,并且在给每一个用户会生成一个sessionID,并且把这个sessionID设置在用户的浏览器中,也就是设置cookie

cookie的在python中的设置 在headers中添加

获取session,使用session登录

url = “” # 已经登录后的url
login_url = “”
headers = {‘User-Agent’:’’}
如果需要爬虫程序主动记录cookie并且携带cookie,那么在使用requests之前先调用session方法,并且使用session方法返回的对象请求即可
req = requests.session()
登录请求数据
data = {}
发起登录请求
resp = req.post(url=login_url,headers=headers,data=data)
if resp.status_code == 200:
发起新的请求,获取目标数据
res = req.get(url=url, headers=headers)
print(res.text)

三 数据解析

1 爬虫实战只Xpath数据解析
(1)XPath 全称 XML Path Language 即 XML路径语言,他是一门在XML文档中查找信息的语言。最初是用来搜寻XML文档,但是同样使用HTML文档的搜索,所以子啊做爬虫时完全可以使用XPath做相应的信息抽取.。
(2)XPath常用规则
在这里插入图片描述
(3)简单的实例

from lxml import etree

# text = '''
# <!DOCTYPE html>
# <html lang="en">
# <head>
#     <meta charset="UTF-8">
#     <title>学习园地</title>
# </head>
# <body>
#     <ul>
#         <li><a href="/a/b/c/java/">java工程师</a></li>
#         <li><a href="/a/b/c/python/">python工程师</a></li>
#         <li><a href="/a/b/c/ai">AI工程师</a></li>
#     </ul>
# </body>
# </html>
# '''
#
# # 使用etree 解析html字符串
# html = etree.HTML(text)
# # print(html)
# # 提取数据
# r1 = html.xpath('/html/body/ul/li/a/text()')
# print(r1) # ['java工程师', 'python工程师', 'AI工程师']
# r2 = html.xpath('/html/body/ul/li[1]/a/text()')
# print(r2) # ['java工程师']

# html = etree.parse("./test.html", etree.HTMLParser())
# r = html.xpath('/html/body/ul/li/a/text()')
# print(r)

html文件

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学习园地</title>
</head>
<body>
    <ul>
        <li><a href="/a/b/c/java/">java工程师</a></li>
        <li><a href="/a/b/c/python/">python工程师</a></li>
        <li><a href="/a/b/c/ai">AI工程师</a></li>
    </ul>
</body>
</html>

/ 当前元素的直接子节点
// 当前元素的子节点或孙子节点
text() 获取文本
@attr 获取属性对应的值

2 爬虫实战只BeautifulSoup数据解析
(1) 环境配置 pip3 install beautifulsoup4
(2)导入模块 from bs4 import Beautiful

html_text = """<html><head></head></html>"""
soup = soup = BeautifulSoup(html_text, ‘lxml’)
获取文本内容
soup.标签名.text
实例 r = soup.title.text
获取标签的属性值
soup.标签名[‘属性名’]
实例 r = soup.ul.li.a[‘href’]

并不是所有信息都可以简单的通过结构化获取
使用find和find_all方法进行查找
find和find_all 可以有多个搜索添加叠加 例如 find(‘a’, id=‘link3’, class=‘sister’)
find返回的是一个bs4.elemment.Tag对象,如果有多个满足的结果,只返回第一个,如果没有,返回None
find_all返回的是一个由bs4.element.Tag 对象组成的list,不管找到几个还是没有找到,都是list

css 选择器
通过标签选择元素
soup.select(‘标签名’)
通过class类名获取元素
soup.select(’.[class的属性值]’)
通过ID名获取元素
soup.select(’#[id的属性值]’)
通过空格层级关系获取元素
soup.select(‘标签名 标签名 标签名…’)
通过逗号,并列关系获取元素
soup.select(‘标签名,标签名,标签名, …’)

3 爬虫实战只re正则表达式数据解析

四 爬虫进阶

1 POST请求有道翻译
2 代理IP及代理IP数据爬取
3 分页数据爬取
4 多进程与多线程

五scrapy 框架

1 配置环境
1.1、mac linux 系统
pip3 install scrapy
1.2、windows

  1. pip3 install wheel
  2. 下载 twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
  3. 进入下载目录,执行 pip3 install Twisted-17.1.0-cp35-cp35m-win_adm64.whl(Teisted:就是一个异步的架构,被作用在了scrapy中, 如果报错,查看版本是否符合当前的开发环境,cp指的是python是什么版本的)
  4. pip3 install pywin32
  5. pip3 install scrapy

2 crapy的基本使用
创建工程的基本命令

scrapy startproject projectName

目录结构
spiders:爬虫文件夹 (必须要存放一个爬虫的源文件)
创建爬虫源文件
进入 爬虫文件夹 (cd projectName

scrapy genspider spiderName www.xxx.com

执行工程
第一种方式:cmd

scrapy crawl spiderName

第二种方式:创建执行的入口文件 main.py

from scrapy.cmdline import execute 

execute("scrapy crawl http_ua".split())

这个方法和在终端中执行命令时一样的

执行工程后,会默认输出工程的所有日志信息

指定类型日志输出:

setting.py 中 添加 LOG_LEVEL=‘ERROR’ (任意位置添加即可)

执行的启动命令后可能还是没有信息输出,这是需要将setting.py

ROBOTSTXT_OBEY = True

改为False

修改UA

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值