【网络爬虫】

本文介绍了网络爬虫的基本概念,工作原理,如何使用Python的urllib库进行网页数据抓取,以及在实际应用中遇到的挑战和道德问题。同时提到了Selenium在模拟动态网页中的作用。

网络爬虫

网络爬虫是一种自动化程序,用于从互联网上收集数据。它模拟人类浏览器的行为,访问网页并提取所需的信息。网络爬虫通常用于搜索引擎、数据分析、价格比较等领域。

网络爬虫的工作原理是通过发送HTTP请求到目标网站,获取网页的HTML代码。然后,它会解析HTML代码,提取出想要的数据,如标题、内容、链接等。爬虫还可以通过跟踪链接,自动访问其他页面,进一步收集更多的数据。

爬虫可以使用各种编程语言实现,如Python、Java、Ruby等。在选择编程语言时,需要考虑其对网络请求、HTML解析和数据处理的支持程度。

在爬取网页数据时,需要注意遵守网站的爬虫规则。有些网站可能会设置反爬虫机制,如限制访问频率、验证码等。为了避免被封禁或触发反爬虫机制,可以设置合理的请求间隔,并使用代理IP来隐藏真实IP地址。

网络爬虫的应用非常广泛。在搜索引擎中,爬虫通过不断抓取网页内容,建立搜索引擎索引,使用户能够快速找到所需信息。在数据分析中,爬虫可以用于收集和清洗数据,为后续分析提供支持。在价格比较网站中,爬虫可以收集不同电商网站的价格信息,帮助用户选择最优惠的商品。

然而,网络爬虫也面临一些挑战和道德问题。一些网站不希望被爬虫访问,因为它们担心数据被滥用或侵犯隐私。因此,爬虫需要遵守网站的robots.txt文件,避免访问禁止的页面。此外,爬虫还应该遵守相关法律法规,如个人信息保护法等。

总而言之,网络爬虫是一种强大的工具,可以帮助我们快速获取互联网上的数据。但是,我们在使用爬虫时需要遵守相关规定,保护个人隐私和维护网络生态的健康发展。

爬取静态网页数据

urllib库
urllib库是python内置的HTTP请求库,它可以看做是处理URL的组件集合。

模块名称描述
urllib.request请求模块
urllib.error异常处理模块
urllib.parseurl解析模块
urllib.robotparserrobots.txt解析模块

使用urllib快速爬取网页数据

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

在上面的代码中,有一句比较核心的代码

response = urllib.resquest.urlopen('http://www.baidu.com')

上述代码调用了urllib.resquest模块中的urlopen方法,导入了百度首页的url,使用的协议是http。这是urlopen的一种简单用法.
使用urlopen方法发送HTTP请求后,服务器返回的响应内容封存在一个HTTPResponse类型的对象中。

import urllib.request
response =  urllib.request.urlopen('http://www.itcast.cn')
print(type(response))

HTTPResponse类属于http.client模块,该类提供了获取URL。状态码、相应内容等一系列方法.

url表明目标资源在网站中的位置
geturl()用于获取响应内容的url,该方法可以验证发送的HTTP请求是否被重新调配
info()返回页面的元信息
getcode()返回HTTP请求的响应状态码

示例

import urllib.requset
response = urllib.request.urlopen('http://pthon.org')
# 获取响应信息对应的url
print(response.geturl())
# 获取响应码
print(response.getcode())
# 获取页面的元信息
print(response.info())

在构建请求时,除了必须设置的url参数外,还可以加入很多内容,例如下面的参数

data默认为空,表示提交单数据,同事HTTP请求方法将从默认的GET方式改为POST方式
headers默认为空,该参数是一个字典类型

在使用urllib库发送URL的时候,建议使用构建Request对象的方式
1.将url作为Request方法的参数,构建并返回一个Request对象
2.将Request对象作为urlopen方法的参数,发送给服务器并接收响应。

编码转移
当传递的URL中包含中文或者其他特殊字符(比如空格时),需要用到urllib.parse库中的urlencode方法将URl进行编码。
它可以将“key:value”这样的键值对转换成“key=value”这样的字符串。
解码使用的是url.parse库的unquote方法。
代理服务器
urlopen不支持代理、Cookie等其他的HTTP/HTTPS高级功能,所以如果想要设置代理,不能使用自带的urlopen,而是要自定义opener。
三步骤
1.使用相关的Header处理器创建特定功能的处理器对象.
2.通过urllib.request.build_opener()方法使用这些处理器对象创建自定义的opener对象。
3。使用自定义的opener对象,调用open方法发送请求。

爬取动态网页数据

python中提供了许多模拟浏览器运行的库,包括Selenium、Splash、pyAutoGUI等。

Selenium

Selenium是一个开源的、便携式的自动化测试工具、它最初是为网站自动化测试而开发的,Selenium支持与主流浏览器的配合使用。Selnium可以直接运行在浏览器中,模拟用户使用浏览器完成一些动作,自动加载页面、输入文本。选择下拉框、单击按钮、单击超链接等。不过,Selenium本身不带浏览器,它需要通过一个浏览器驱动程序WebDriver才能与所选浏览器进行交互。
下载Selenium

pip install selenium

每个浏览器都有一个特定的WebDriver。WebDriver称为驱动程序实现Selenium与浏览器之间的交互。

浏览器驱动系统
Chromium/ChromechromeDriver
Firefoxgeckodriver
EdgeMicrosoftWebDriver
IEIEDriverServer
Operaoperachromiumdriver
Safarisafaridriver

驱动系统下载地址
Chrome驱动程序
Firefox驱动程序
Safari驱动程序

记得去把WebDriver配置到系统环境变量

WebDriver类的常用属性

属性说明
title获取当前页面的标题
current_url获取当前页面的URl地址

WebDriver类的常用方法

方法说明
get()根据指定URL地址访问页面
maximize_window()设置浏览器窗口最大化
forward()页面前进
back()页面后退
refresh()刷新当前页面
save_screenshot()对当前浏览器窗口进行截图
quit()会话结束时退出浏览器
close()关闭当前窗口

1.访问网站

from selenium import webdriver
driver = webdriver.Chrome()

driver.get("http://www.baidu.com/")

2.前进、后退、刷新

driver.forward()
driver.back()
driver.refresh()

3、获取

print(driver.title)#获取标题
print(driver.current_url)#获取当前页的url

4.定位查找元素的方法
Selenium的WebDriver类中提供了很多定位元素的方法,有通过指定方式定位元素、通过id属性定位元素、通过name属性定位元素、通过链接文本定位元素等方法,以下是通过id属性定位元素的方法:

driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")
#通过id属性定位元素
element = driver.find_element_by_id('header-wrapper')
#访问text属性输出元素的文本内容
print(element.text)

还有各种方法,放到之后再讲了各位。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值