美文网首页
网络爬虫请求与内容抓取

网络爬虫请求与内容抓取

作者: Bioinfor生信云 | 来源:发表于2022-12-24 21:08 被阅读0次

HTTP的请求与响应

HTTP是超文本传输协议

  • Hyper Text Transfer Protocol, 超文本传输协议
    – 超文本:超出普通文本,如网页就属于一种超文本
    – 协议:互联网中通信时,计算机之间必须共同遵守的规定或规则
    – 作用:用于网络服务器传输超文本到本地浏览器的传送协议
  • HTTP协议是客户端发起请求,服务器回送响应
    – HTTP请求中常用的是Get 和 Post 请求参数

HTTP协议的请求与响应

HTTP协议的请求报文

  • 一个HTTP请求由请求行(request line)、请求头部(request header)、空行和请求体4部分组成
    • Accept:客户端可识别的响应内容类型列表
    • Accept-Language:客户端可接受的自然语言
    • User-Agent:产生请求的浏览器类型
    • Host:请求的主机名
    • Content-Type: 发送端发送的数据类型


HTTP中的Get与Post请求

  • Get请求:从指定的资源请求数据(从服务器上获取数据)
    – 不带参数的Get请求:http://www.baidu.com
    – 带参数的Get请求:https://www.baidu.com/s?wd=python(参数(key=value格式)多个参数之间使用‘&’连接)
  • Post请求:向指定的资源提交要被处理的数据(向服务器上传递数据)



    参数不再写入URL,而是放入请求报文中进行传输

HTTP协议的响应报文

  • 一个HTTP响应由状态行(response line)、响应头部(request header)、响应正文3部分组
  • 状态码(status-code)是响应报文状态行中包含的一个3位数字,表明特定的请求是否被满足,如果未满足,原因是什么



使用Requests库获取网页源代码

Requests是一个简答优雅的python HTTP库

  • Requests 库是一个简洁且简单的处理HTTP请求的第三方库
    – 安装Anaconda即可直接使用
    – 导入Requests: import requests


Requests中的Get与Post请求

Get请求(不带参数) :requests.get('http://www.xxx.com')
Get请求(带参数):requests.get('http://www.xxx.com’, params={‘key1': 'value1'})
Post请求:

  • Get请求中使用params接收参数,Post请求中使用data接受参数
  • Get请求或者Post请求都是可以携带参数, 参数通常写成字典的形式

Requests中的响应


判断状态码是否为200 response.raise_for_status()
避免乱码 response.encoding = response.apparent_encoding

使用Selenium模拟浏览器操作

Selenium 是一个浏览器自动化测试组件

Requests适合爬取网页的HTML文档信息,但无法解析CSS、JavaScript代码
• Selenium通过驱动浏览器,完全模拟浏览器操作
• 支持跨不同浏览器,平台和编程语言的自动化
• 由于selenium解析执行了CSS、JavaScript所以相对requests的爬虫效率要低

Selenium环境搭建

安装selenium:pip install selenium
安装浏览器驱动程序:查看浏览器的版本,根据浏览器与版本号下载
Chrome:https://sites.google.com/a/chromium.org/chromedriver/downloads
Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox:https://github.com/mozilla/geckodriver/releases
Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/
• 将解压得到的文件放到指定的文件夹中
– Windows系统: Anaconda安装目录下的Scripts文件夹
默认安装时:C:\ProgramData\Anaconda3\Scripts
– Mac系统:/usr/local/bin/

Selenium的用法

Selenium导入:from selenium import webdriver


打开目标网址:browser.get('https://dxy.cn/')

Selenium元素定位

• Selenium提供了8种定位的方式
• find_element():查找单个元素
• find_elements(): 查找多个元素,返回一个list


等待页面加载

• 当一个页面被加载到浏览器时, 该页面内的元素可以在不同的时间点被加载
• waits提供了一些操作之间的时间间隔- 主要是定位元素或针对该元素的任何其他操作
– 使用前导入:from selenium.webdriver.support.ui import WebDriverWait
– 创建browser时,设置全局元素等待超时的事件(隐式等待)

browser = webdriver.Chrome()
browser.implicitly_wait(10) # 表示查找元素时超时时间是10秒
element =  browser.find_element(By.ID, 'kw')

模拟鼠标操作

• 使用webDriver提供的ActionChains类模拟鼠标事件
导入ActionChains类: from selenium.webdriver import ActionChains
调用ActionChains()类,将浏览器驱动browser传入:chains = ActionChains(browser)
• ActionChains提供的常用鼠标操作方法:
– 左击:chains.click(elem)
– 右击:chains.context_click(elem)
– 双击:chains.double_click(elem)
– 鼠标悬停:chains. move_to_element(elem)

模拟键盘操作

• 借助keys模块:
– 使用前先导入:from selenium.webdriver.common.keys import Keys
• 常用的键盘操作:
– elem.sendkeys("Python")
– elem.sendkeys(Keys.Back_SPACE)
– elem.sendkeys(Keys.CONTROL, 'c’)
elem.clear(): 清空内容


截图操作

  • 整个窗口截图并保存:browser.get_screenshot_as_file(“./XXX.png")
  • 指定元素截图并保存:
# 找到目标元素
elem = browser.find_element(By.ID, "kw")
# 截取搜索框元素
elem.screenshot(“./kw.png")

关闭浏览器

• 关闭当前窗口:browser.close()
– 常用于用例执行多窗口任务时,关闭某个窗口
• 关闭所有窗口: browser.quit()
– 用于所有操作完成时
– 同时会退出相关的驱动程序

欢迎关注Bioinfor 生信云!

相关文章

  • 网络爬虫请求与内容抓取

    HTTP的请求与响应 HTTP是超文本传输协议 Hyper Text Transfer Protocol, 超文本...

  • 爬虫原理与数据抓取(一)

    通用爬虫与网络爬虫 1.通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重...

  • Python实用练手小案例

    抓取网页信息,并生成txt文件内容!Python抓取网页技能——Python抓取网页就是我们常看见的网络爬虫,我们...

  • 爬虫01:概述

    爬虫概述 1.目录清单 爬虫简介 通用爬虫和聚焦爬虫 网络请求那些事儿 网络数据抓包分析 2.章节内容 2.1爬虫...

  • Python学习

    python爬虫原理 1、什么是爬虫 爬虫本质上就是一段请求网站并提取数据的自动化程序。可以抓取网络上网页文本、图...

  • python爬虫01

    爬虫概述 1. 目录清单 爬虫简介 通用爬虫和聚焦爬虫 网络请求那些事儿 网络数据抓包分析 2. 章节内容 2.1...

  • 【1】爬虫概述

    爬虫概述 1. 目录清单 爬虫简介 通用爬虫和聚焦爬虫 网络请求那些事儿 网络数据抓包分析 2. 章节内容 2.1...

  • 用Python写爬虫,来来来,你也能学会

    Python Python爬虫,一般用于抓取特定的内容,最近想学学,通过网络抓取自己想要的内容。案例程序主要功能:...

  • Java爬虫中HttpClient请求头的设置

    在做爬虫的时候发现如果不设置请求头的话,每次httpclient发起的请求都是响应移动端板式的,无法抓取响应的内容...

  • 爬虫基础知识

    一、定义 网络爬虫就是模拟浏览器发送网络请求,接受请求响应,一种按照一定的规则,自动的抓取互联网信息的程序。 原则...

网友评论

      本文标题:网络爬虫请求与内容抓取

      本文链接:https://www.haomeiwen.com/subject/fyyrqdtx.html