爬取静态网页的技术

  • 数据请求模块
    • 一、Requests库
      • 发送GET请求
      • 发送POST请求
      • get请求和post请求两者之间的区别
      • 处理响应
      • 定制请求头
      • 验证Cookie
      • 保持会话
    • 二、urllib库
  • 数据解析模块
    • 正则表达式
      • re模块的使用
    • XPath
      • 需要通过lxml库
    • Beautiful Soup
    • JSONPath

静态网页结构都是HTML语法,所以说我们想要爬取这个静态网页我们只需要爬取这个网页的源代码就好了,而我们的网络爬虫就是模仿用户访问浏览器的过程,包括想Web服务器发送HTTP请求,服务器对HTTP请求作出响应并返回网页源代码的过程
       为帮助开发人员抓取静态网页数据,减少开发人员的开发时间,Python提供了一些功能齐全的库, 包括urllib、urllib3和Requests,其中urllib是Python内置库,无须安装便可以直接在程序中使用; urllib3和Requests都是第三方库,需要另行安装后才可以在程序中使用。



第三方库的安装参考相关文章点击这里


数据请求模块

一、Requests库

发送GET请求

在Requests库中,GET请求通过调用get()函数发送,该函数会根据传入的URL构建一个请求(每个请求都是Request类的对象),将该请求发送给服务器

import requests
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.42"}
url1 = 'http://www.baidu.com/s'
data={'wd':'python'}
# response =requests.get('https://xdclass.net/#/index',headers=headers)
response=requests.get(url1,params=data,headers=headers)# print(response.status_code)  响应信息
response.encoding='utf-8'
print(response.text) #text是爬取的源代码字符串输出# print(response.content.decode('utf-8'))
#
# print(response.headers)
# print(response.cookies)

发送POST请求

在Requests中,POST请求可以通过调用post()函数发送,post()函数会根据传入的URL构建一个请求,将该请求发送给服务器,并接收服务器成功响应后返回的响应信息。post()函数的声明如下:

import requests
base_url = 'http://mp-meiduo-python.itheima.net/login/'
## 准备请求数据
form_data = {'csrfmiddlewaretoken':'FDb8DNVnlcFGsjIONtwiQoi6PtmCLeBsRgyjx2o2nsZ4MXDEGDeM2dUImEkj9O7t','username': 'admin','pwd': 'admin','remembered': 'on'}
response = requests.post(base_url, data=form_data) # 根据URL构造请求,发送POST请求
print(response.status_code) # 查看响应信息的状态码

get请求和post请求两者之间的区别

GET请求 – 参数都显示在URL上,服务器根据该请求所包含URL中的参数来产生响应内容。 由于请求参数都暴露在外,所以安全性不高。
POST请求 – 参数在请求体当中,消息长度没有限制而且采取隐式发送,通常用来向HTTP服务器提交量比较大的数据。 POST请求的参数不在URL中,而在请求体中,所以安全性也高,使用场合也比GET多。

处理响应

在Requests库中,Response类的对象中封装了服务器返回的响应信息

# 通过访问Response类对象的text属性可以获取字符串形式的网页源代码。
import requests
base_url = 'https://www.baidu.com/'
# 根据URL构造请求,发送GET请求,接收服务器返回的响应信息
response = requests.get(url=base_url)
# 查看响应内容
print(response.text)

#为了保证获取的源代码中能够正常显示中文,这里需要通过Response对象的encoding属性将编码格式设置为UTF-8
import requests
base_url = 'https://www.baidu.com/'
# 根据URL构造请求,发送GET请求,接收服务器返回的响应信息
response = requests.get(url=base_url)
# 设置响应内容的编码格式
response.encoding = 'utf-8'
# 查看响应内容
print(response.text)
#使用content属性获取该图片对应的二进制数据,并将数据写入到本地文件中。
import requests
base_url = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'
response = requests.get(base_url)
# 获取百度Logo图片对应的二进制数据
print(response.content)
# 将二进制数据写入程序所在目录下的baidu_logo.png文件中
with open('baidu_logo.png', 'wb') as file:file.write(response.content)

定制请求头

验证Cookie


保持会话


二、urllib库

简单案例:

mport urllib.request
# 调用urllib.request库的urlopen方法,并传入一个url
response = urllib.request.urlopen('http://www.baidu.com')
# 使用read方法读取获取到的网页内容
html = response.read().decode('UTF-8')
# 打印网页内容
print(html)




如果希望对请求执行复杂操作,则需要创建一个Request对象来作为urlopen方法的参数。

# 将url作为Request方法的参数,构造并返回一个Request对象
request = urllib.request.Request('http://www.baidu.com')
# 将Request对象作为urlopen方法的参数,发送给服务器并接收响应
response = urllib.request.urlopen(request)


数据解析模块


正则表达式

正则表达式是基于文本的特征来匹配或查找指定的数据,它可以处理任何格式的字符串文档,类似于模糊匹配的效果

re模块的使用

Python中提供了re模块操作正则表达式,该模块中提供了丰富的函数或方法来实现文本匹配查找、文本替换、文本分割等功能。re模块的使用一般可以分为两步,分别是创建Pattern对象和全文匹配。
使用compile()函数对正则表达式进行预编译,从而生成一个代表正则表达式的Pattern对象。

import re
string = "狗的英文:dog,猫的英文:cat。"
pattern= re.compile(r“[\u4e00-\u9fa5]+”)#中文对应的Unicode编码范围
print(re.findall(pattern, string))或者print(pattern.findall(string))

XPath

XPath和Beautiful Soup 基于HTML/XML文档的层次结构来确定到达指定节点的路径,所以它们更适合处理层级比较明显的数据。
XPath使用路径表达式选取XML文档中的节点或者节点集,这些路径表达式代表着从一个节点到另一个或者一组节点的顺序,并以“/”字符进行分隔。

需要通过lxml库


from lxml import etree
string1="""
<div class="useful"><ul><li class="info">我需要的信息1</li><li class="info">我需要的信息2</li><li class="info">我需要的信息3</li></ul>
</div>
<div class="useless"><ul><li class="info">我需要的信息4</li><li class="info">我需要的信息5</li><li class="info">我需要的信息6</li></ul>
</div>
"""
select =etree.HTML(string1)
text=select.xpath('//div[@class="useless"]/ul/li/text()')
print(text)

Beautiful Soup

XPath和Beautiful Soup 基于HTML/XML文档的层次结构来确定到达指定节点的路径,所以它们更适合处理层级比较明显的数据。

通过一个示例来演示如何创建BeautifulSoup类的对象,具体代码如下所示。

1  from bs4 import BeautifulSoup
2  html_doc = """<html><head><title>The Dormouse's story</title></head>
3  <body>
4  <p class="title"><b>The Dormouse's story</b></p>
5  <p class="story">Once upon a time there were three little sisters;
6  and their names were
7  <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
8  <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
9  <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
10  and they lived at the bottom of a well.</p>
11  <p class="story">...</p>
12  """
13  # 根据html_doc创建BeautifulSoup类的对象,并指定使用lxml解析器解析文档
14  soup = BeautifulSoup(html_doc, features='lxml')
15  print(soup.prettify())# prettify是格式化代码的让代码更好看

通过操作方法进行解读搜索





JSONPath

JSONPath 专门用于JSON文档的数据解析。JSONPath的作用类似XPath,它也是以表达式的方式解析数据的,但只能解析JSON格式的数据。





Python爬虫爬取静态网页基本方法介绍相关推荐

  1. Python爬虫爬取静态网页实例一:爬取内涵段子吧上的段子

    最近在学爬虫,这里用实例来与大家分享一下我学习的经验. 这里讲一个爬取静态网页内容的实例,Python一般利用正则表达式爬取静态静态网页的内容,而且因为静态网页源代码固定,不会发生变化,所以比较简单, ...

  2. chrome动态ip python_用Python爬虫爬取动态网页,附带完整代码,有错误欢迎指出!...

    系统环境: 操作系统:Windows8.1专业版 64bit Python:anaconda.Python2.7 Python modules:requests.random.json Backgro ...

  3. Python爬虫爬取动态网页

    系统环境: 操作系统:Windows8.1专业版 64bit Python:anaconda.Python2.7 Python modules:requests.random.json Backgro ...

  4. Python爬虫-爬取斗鱼网页selenium+bs

    爬取斗鱼网页(selenium+chromedriver得到网页,用Beasutiful Soup提取信息) ============================= =============== ...

  5. python爬虫爬取微信网页_python下爬虫爬取微信公众号文章给网站的相关操作与问题...

    一.出发点 在dodo团队知乎号开刊文章中已介绍过本团队平常的实际工作,我们是一个从事游戏与金融结合的项目开发与运营团队.技术上主要是从事游戏分期.玩后付支付插件.游戏充值app等前后端开发,主要使用 ...

  6. python爬虫——爬取静态微博页面,找到可能认识的人

    环境: BeautifulSoup4 (4.6.0) requests (2.19.1) 分析 该博客是本人第一个爬虫项目,之前比较懒,没上传博客,最近再学爬虫,在此一并补上. 我们知道,爬虫获取数据 ...

  7. 使用Python爬虫爬取简单网页(Python爬虫入门)

    今天我们来看一看使用Python爬取一些简单的网页. 所用工具:IDLE (Python 3.6 64-bit) 一. 爬取京东商品页面 我将要爬取的是这个东京商品页面信息,代码如下: import ...

  8. python爬虫 爬取京东网页

    import json import requests from bs4 import BeautifulSoupinput_name = input('请输入搜索关键字:')# 获取京东商品前50页 ...

  9. python爬虫网页中的图片_Python爬虫爬取一个网页上的图片地址实例代码

    本文实例主要是实现爬取一个网页上的图片地址,具体如下. 读取一个网页的源代码: import urllib.request def getHtml(url): html=urllib.request. ...

最新文章

  1. 以网络安全为例的大数据可视化设计
  2. 深度学习-TF函数-layers.concatenate用法 numpy数组维度
  3. 在Linux中搭建一个FTP服务器
  4. Pixhawk的传感器数据(陀螺、加计等)流程
  5. [转]快速清除SQL Server日志的两种方法
  6. cyclicbarrier_Java并发– CyclicBarrier示例
  7. 大数据预测实战-随机森林预测实战(四)-模型调参
  8. MYSQL数据库迁移到ORACLE数据库
  9. Mac上的Dock 栏如何设置更好用?
  10. java 设置jframe大小_Java Swing JFrame设置大小
  11. Pycharm进入debug模式后一直显示collecting data解决方法
  12. mysql命令报错-bash: mysql: command not found
  13. java实现图片压缩
  14. Redis Operator学习笔记
  15. 转眼间十年过去了,还记得曾经红遍大江南北的这首歌吗?
  16. matplotlib 均值_matplotlib可视化箱线图
  17. Mysql:外码约束
  18. 金字塔型自动化的利弊
  19. GDPR对ITSM的影响
  20. 理解Flux机制和应用

热门文章

  1. windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)
  2. ppst——开发技术视频 spring的restful服务搭建
  3. 今日头条改名“字节跳动”背后,向不堪的过往说“不”?
  4. 阿尔法狗打脸啪啪响啊~
  5. Android的log机制,androidtv开发总结
  6. CentOS7.3下载,CentOS7.3 iso下载
  7. 中小型企业网络架构(一)
  8. 四级词汇——不择手段记单词
  9. 产品经理技能,岗位职责,项目开发流程
  10. 抖音IP属地是实时更新的吗?能不显示吗?