前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小白学爬虫系列-基础-两种爬虫实现方式

小白学爬虫系列-基础-两种爬虫实现方式

作者头像
小一不二三
发布2019-12-31 16:50:46
6330
发布2019-12-31 16:50:46
举报

作者:一叶

介绍:放不下灵魂的搬砖者

全文共1773字,阅读全文需8分钟

Python版本3.8.0,开发工具:Pycharm

上节讲了爬虫的一些准备工作,那爬虫怎么实现的呢?我们往下看

网络爬虫的第一步就是根据 URL,获取网页的 HTM L信息。在 Python3 中,可以使用 urllib.requestrequests 进行网页数据获取。

  • urllib 库是 Python 内置的,无需我们额外安装,只要安装了 Python 就可以使用这个库。
  • requests 库是第三方库,需要我们自己安装。
通过urllib进行爬虫

1. 直接引入urllib库

代码语言:javascript
复制
# 引入库
from urllib import request
import chardet

2. 获取网页内容

代码语言:javascript
复制
# 发送请求并接收响应
response = request.urlopen(url)
# 调用read方法读取并转换为utf8编码
html = response.read()
# 获取文本编码
html_encoding = chardet.detect(html)
# 文本转换编码
content = html.decode(html_encoding['encoding'])
print(content)
通过 requests 爬虫

1. requests安装

在cmd中,使用如下指令安装requests:

  • pip install requests # 只安装python3,使用这条命令安装 requests
  • pip3 install requests # 同时安装python2 和python3,使用这条命令安装requests

2. 获取网页内容

代码语言:javascript
复制
import requests

url = 'https://www.bxwxorg.com/read/20/'
# 获取网页内容
response = requests.get(url)
# 获取网页相关信息
print(response.headers)
print(response.cookies)
print(response.status_code)
print(response.text)
print(response.content)

注:

  • text 返回的是Unicode 型的数据
  • content 返回的是是二进制的数据。

在Python3默认编码是 unicode,utf-8 可以看做是 unicode 的一个扩展集。所以text可以直接输出网页内容,而 content 输出的是字节码

编码问题

Python3 当遇到 gbk 编码的网页时,如果未指定编码类型,会出现乱码,这时候有以下两种方法解决乱码:

代码语言:javascript
复制
# 方法1. response设置编码方式
response.encoding = 'gbk'
# 此时text输出为中文
print(response.text)

# 方法2. content内容进行解码
print(response.content.decode('gbk'))
爬虫头部伪装

上节说过当你的爬虫不能被服务器识别为真正的浏览器访问时,服务器则不会给你返回正确的信息,这个时候就必须对爬虫代码进行伪装

HTTP部分请求头部(HEADER)包含:

代码语言:javascript
复制
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Host: www.baidu.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
  • Connection

允许客户端和服务器指定与请求/响应连接有关的选项:keep-alive:长连接;

  • Accept

指定客户端能够接受的内容类型,在这唯一要提醒的就是它只是建议服务器,而并非就是你写成什么他就返回给你什么。

  • Accept-Encoding

浏览器发给服务器,声明浏览器支持的编码类型

  • Accept-Language

请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言。

  • Upgrade

给出了发送端可能想要"升级"使用的新版本和协议

  • User-Agent

向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核等信息的标识。给出发送端使用的MIME版本

  • referer

用于告诉服务器我是从哪个页面链接过来的。用于统计访问量、防外连接等

设置 header

代码语言:javascript
复制
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
           'Referer': 'http://www.quanshuwang.com/book/44/44683',
           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
           'Accept-Encoding': 'gzip, deflate, br',
           'Accept-Language': 'zh-CN,zh;q=0.9'
               }
# 设置headers
response = requests.get(url = url, headers = headers)
爬虫登录

1. 通过账号密码登录

代码语言:javascript
复制
login_url = 'https://xxxxx.com/login'
# 设置登录名与密码
form_data = {'username':'*****', 'password':'*****'}  
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
           'Accept-Encoding': 'gzip, deflate, br',
           'Accept-Language': 'zh-CN,zh;q=0.9'
           } 
response = requests.post(login_url, data=form_data, headers=headers)  

2. 通过历史cookie登录

代码语言:javascript
复制
raw_cookies = "k1=v1; k2=v2; k3=v3"; 
cookies = {}
# 设置cookies数据
for line in raw_cookies.split(';'):  
    key,value=line.split('=',1)  
    cookies[key]=value  
login_url = 'http://xxxxxx.com'  
response = requests.post(login_url,cookies=cookies)  
print(response.text)  

下节讲介绍网页解析利器,实现网页内容获取

Python系列

Python系列会持续更新,从基础入门到进阶技巧,从编程语法到项目实战。若您在阅读的过程中发现文章存在错误,烦请指正,非常感谢;若您在阅读的过程中能有所收获,欢迎一起分享交流。

如果你也想和我一起学习Python,关注我吧!

学习Python,我们不只是说说而已

End

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 知秋小梦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通过urllib进行爬虫
  • 通过 requests 爬虫
  • 爬虫头部伪装
  • 爬虫登录
  • Python系列
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档