python学习之爬虫一

一,爬虫原理:

通过模拟浏览器的行为 自动从网上获得需要的数据

二,爬虫的流程

1,发送request请求给某个URL :

2,获得返回的response 解析 得到需要的数据 再根据自己的需要进行各种处理

三,具体的实现代码

3.1发送request请求分2种:get 和 post  ,这里使用的是python3 使用的模块是requests ,可使用pip3 install requests(pip也行 只要你的python安装目录下的scripts文件夹里既有pip.exe 又有pip3.exe) 下载并安装

3.1.1

get请求:

get请求的参数一般有个URL就够了

示例:

import requests

URL = ‘https://github.com/login‘
r1 = requests.get(URL)  # 用变量r1接收response

3.1.2

post请求:

post请求一般用于向服务端提交资料 比如登录账户 点赞

post请求的参数比较多 一般包括url=‘‘ , headers={}, data={}, cookies={}

其中headers是要提交的请求头 一般至少包括:uesr-Agent设备信息

data是请求体 一般至少包括: user账号 password密码  有时要有token(用于验证是否是浏览器行为 一种反爬虫手段)

cookies 一种最常见的验证方式 即反爬方式

具体的某个请求浏览器发送了哪些信息可以到浏览器的network里面找 最大限度的模拟浏览器向URL发送请求

示例:

1 r2 = requests.post(
2     url=‘https://github.com/session‘,
3     data={‘login‘: ‘xxx‘, ‘password‘: ‘xxx‘, ‘authenticity_token‘: token},
4     cookies=r1_cookies_dict,
5     headers={‘User-Agent‘:
6             ‘Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36‘}
7                    )

3.2 获得返回的response 阶段

3.2.1

对于返回的r1以下几种操作:

# r1.content   # 原始的字节类型的内容
# r1.text   # 字符串型的内容
# r1.cookies.get_dict()  # 获得返回的cookies并将其转成dict类型
# print(r1.apparent_encoding)  # 获得返回内容的编码
# r1.encoding=‘utf-8‘  # 将编码设置为‘utf-8‘
# r1.encoding=r1.apparent_encoding   # 将编码设为返回来的编码

3.2.2

用BeautifulSoup模块来提取response中的数据

下载并安装 pip install beatifulsoup4

导入模块的方式要注意 :

from bs4 import BeautifulSoup

使用模块的find和find_all方法来获得数据:

find 找到并返回第一个对象

find_all 找到所有的对象并打包成一个列表返回

示例:

import requests
from bs4 import BeautifulSoup
URL = ‘https://github.com/login‘
r1 = requests.get(URL)

# 注意参数为字符串形式(.text),使用了内置解析器‘html.parser‘也有第三方的解析器‘lxml‘
s1 = BeautifulSoup(r1.text, ‘html.parser‘)
# 通过find方法找到一个name属性为特定值的input标签的value属性的值
tag_input = s1.find(‘input‘, attrs={‘name‘: ‘authenticity_token‘})
token = tag_input.get(‘value‘)
# 获得返回的cookies
r1_cookies_dict = r1.cookies.get_dict()

四,一个作业的完整示例:账号密码我用xxx来代替了

‘‘‘
自动登录GitHub账号,并打印name school

writen by Zhao Shuai
qq:123456789
‘‘‘
import requests
from bs4 import BeautifulSoup

# 访问github登录页
URL = ‘https://github.com/login‘
r1 = requests.get(URL)
# r1.content
# r1.text
# r1.cookies.get_dict()
# print(r1.apparent_encoding)
# r1.encoding=‘utf-8‘
# r1.encoding=r1.apparent_encoding
# print(r1.text)   # 验证 此get请求成功获得返回值

# 先找到返回过来的token
s1 = BeautifulSoup(r1.text, ‘html.parser‘)
# tag_div = s1.find(name=‘div‘, id=‘login‘)  # 这里有个坑 不要先找这个div再找里面的hidden input 找不到 要直接找input
# print(tag_div)  # 这里能正确打印 但不是我们要的内容
tag_input = s1.find(‘input‘, attrs={‘name‘: ‘authenticity_token‘})
# 到这里为止并没有获得我要的那个单独的input 而是一堆东西 不过并不影响我获得该隐藏input下的token值 不知道为什么?
# print(tag_input.get(‘value‘))   # 成功获得token
token = tag_input.get(‘value‘)

# 获得cookies
r1_cookies_dict = r1.cookies.get_dict()
# print(r1_cookies_dict)

# 输入账户信息 带上token 登录
r2 = requests.post(
    url=‘https://github.com/session‘,
    data={‘login‘: ‘xxx‘, ‘password‘: ‘xxx‘, ‘authenticity_token‘: token},
    cookies=r1_cookies_dict,
    headers={‘User-Agent‘:
            ‘Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36‘}
                   )
# print(r2.text)  # 验证 带上cookies 并且在data中带上token 账号 密码 正确的话 成功登录

# 进入我的个人信息页面
r3 = requests.get(‘https://github.com/gazs2005‘)
soup = BeautifulSoup(r3.text, ‘html.parser‘)
name = soup.find(‘span‘, attrs={‘itemprop‘: ‘name‘}).text
school = soup.find(‘span‘, class_=‘p-org‘).find(‘div‘).text
print(‘name:%s‘ % name)
print(‘school:%s‘ % school)

最后成功的将我的github账户的昵称(name)和工作单位(school)打印出来  当然工作单位是乱写的

五,学习心得:

爬虫的本质就是用代码模拟浏览器的行为 所以要对浏览器的行为有所了解 这就涉及到web前 后端的知识 这些知识我都不懂  所以 感觉如果要学好爬虫的话 还有很长的路要走啊

要善用浏览器中的‘检查’里的各种功能(比如 Elements Network)来获得信息 以便最大限度的模仿浏览器的行为

原文地址:https://www.cnblogs.com/zhaoshuai5015/p/9274388.html

时间: 2024-11-08 19:09:04

python学习之爬虫一的相关文章

python学习之爬虫(一) ——————爬取网易云歌词

接触python也有一段时间了,一提到python,可能大部分pythoner都会想到爬虫,没错,今天我们的话题就是爬虫!作为一个小学生,关于爬虫其实本人也只是略懂,怀着"Done is better than perfect"的态度硬着头皮开始了这篇文章的撰写!好了,废话不多说! 先说一下今天我们的目的,作为一个音痴但不影响我对于音乐的执着,所以今天我们爬取的是网易云音乐,我们将会通过代码爬取歌词并写入到本地. 作为新手,我很本能就打开页面复制了url,然后用Beautifulsou

Python学习---网页爬虫[下载图片]

爬虫学习--下载图片 1.主要用到了urllib和re库 2.利用urllib.urlopen()函数获得页面源代码 3.利用正则匹配图片类型,当然正则越准确,下载的越多 4.利用urllib.urlretrieve()下载图片,并且可以重新命名,利用%S 5.应该是运营商有所限制,所以未能下载全部的图片,不过还是OK的 URL分析: 源码: #coding=utf-8 import re import urllib def getHtml(url): page=urllib.urlopen(u

python学习之爬虫理论总结

通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种.通用网络爬虫 是 捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联网上的网 页下载到本地,形成一个互联网内容的镜像备份.通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着 整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果搜索引擎如何获取一个新网站的URL: 新网站向搜索引擎主动提交网址: 在其

python学习之爬虫网络数据采集

Python 给人的印象是抓取网页非常方便,提供这种生产力的,主要依靠的就是urllib.requests这两个模块. 网络数据采集之urllib urllib库官方文档地址:https://docs.python.org/3/library/urllib.htmlurllib库是python的内置HTTP请求库,包含以下各个模块内容:(1)urllib.request:请求模块(2)urllib.error:异常处理模块(3)urllib.parse:解析模块(4)urllib.robotpa

Python学习 之 爬虫

目标:下载贴吧或空间中所有图片 步骤:(1)获取页面代码 (2)获取图片URL,下载图片 代码如下: #!/usr/bin/python import re import urllib def getHtml(url): page=urllib.urlopen(url) html=page.read() return heml def getImg(html): reg=r'src="(.*?\.jpg" width' imgre=re.compile(reg) imglist=re.

python学习之爬虫:BeautifulSoup

一.功能: BeautifulSoup是用来从HTML或XML中提取数据的Python库. 二.导入: from bs4 import BeautifulSoup import bs4 三.编码格式: soup使用Unicode编码 四.对象种类: 有四种类型:Tag,NavigableString,BeautifulSoup,Comment.BeautifulSoup将文档转化为树形结构,每个节点都是上述四种类型的Python对象. tag属性:name.attrs 参考网址: 1.http:

python学习笔记——爬虫的抓取策略

1 深度优先算法 2 广度/宽度优先策略 3 完全二叉树遍历结果 深度优先遍历的结果:[1, 3, 5, 7, 9, 4, 12, 11, 2, 6, 14, 13, 8, 10] 广度优先遍历的结果:[1, 3, 2, 5, 4, 6, 8, 7, 9, 12, 11, 14, 13, 10] 4 实践中怎么来组合爬取策略 (1)一般来说,重要的网页距离入口站点的距离很近: (2)广度/宽度优先有利于多爬虫并行进行合作: (3)可以考虑将深度与广度/宽度相结合的方式来实现抓取的策略:优先考虑广

python学习5 爬虫老是被封如何解决

先设置等待时间: 常见的设置等待时间有两种,一种是显性等待时间(强制停几秒),一种是隐性等待时间(看具体情况,比如根据元素加载完成需要时间而等待)图 1 是显性等待时间设置,图 2 是隐性. 第二步,修改请求头: 识别你是程序还是网友浏览器浏览的重要依据就是 User-Agent,比如网友用浏览器浏览就会使这个样子的 User-Agent:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Ch

python学习笔记——爬虫中提取网页中的信息

1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,但包含相关标记,用来分隔语义元素以及对记录和字段进行分层.因此,它也被称为自描述的结构.常见的半结构数据有HTML,XML和JSON等,实际上是以树或者图的结构来存储的. <person> <name>A</name> &l