网络爬虫
网络爬虫是一种自动化程序,用于从互联网上收集数据。它模拟人类浏览器的行为,访问网页并提取所需的信息。网络爬虫通常用于搜索引擎、数据分析、价格比较等领域。
网络爬虫的工作原理是通过发送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/ChromechromeDriverFirefoxgeckodriverEdgeMicrosoftWebDriverIEIEDriverServerOperaoperachromiumdriverSafarisafaridriver
驱动系统下载地址 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)
还有各种方法,放到之后再讲了各位。
推荐链接
发表评论