重庆机电职业技术大学,重庆 404100
摘要:随着信息技术的发展,网络数据成为一种重要资产,如何快速有效地提取和分析数据是目前该研究领域的热点。应用Requests技术分别开发了商品评论、百度贴吧图片爬虫,优化了爬虫算法,并为用户提供了有效的信息参考。下面本文就Python爬虫技术进行简要探讨。
关键词:Python;爬虫技术;
1 爬虫技术介绍
使用Requests、Scrapy和Selenium技术开发的网络爬虫,由于抓取的原始数据格式包含HTML、XML和JSON,因此对目标数据的获取要辅以其他技术解析并持久化保存。
1.1 Requests技术
Requests技术属于爬虫基础性工具包,它模拟人输入网址向服务器递交网络请求,实现自动爬取HTML网页页面信息的功能。根据HTTP协议对资源的六大操作方法,Requests配备对应的GET、POST、HEAD、PUT、PATCH、DELETE六个基础方法和一个REQUEST通用方法,具有HTTP连接池自动化、持久Cookie会话、SSL认证等基本功能。
1.2 Selenium技术
Selenium技术是一个基于Web应用程序且支持浏览器驱动的开源自动化测试框架,其运行过程就是一个可视化地模拟人输入网址、滚动鼠标、点击等动态的操作过程,能够对Chrome、Firefox、IE等浏览器中的对象元素进行定位、窗口跳转及结果比较等操作,具有执行网页JS加载、Ajax动态异步等技术,能做到可见即可爬,支持Python、Java、C#主流编程语言二次开发。
1.3 Scrapy技术
Scrapy技术是一个网站数据爬取和结构性数据提取的应用框架,包含引擎、调度器、下载器、解析爬虫、项目管道五个模块和下载器、解析爬虫两个中间件。该技术框架已设计了爬虫通用的数据和业务接口,方便根据业务需求聚焦爬取、解析、下载、存储等操作。
1.4 其他辅助技术
网络爬虫爬取初始数据后需要进行解析,常用的技术如下:(1)Xpath库,它能够对特定数据进行定位,以更好地获取特定元素,通常存储在XML文档中,在一定程度上起着导航作用。(2)RE正则表达式库,它通过规定一系列的字符及符号来进行数据筛选,实现图片、视频和关键字的搜索,进而实现信息的爬取。(3)BS4库,它运用HTML解析策略,把HTML源代码重新进行格式化,方便使用者对其中的节点、标签、属性等进行操作,完成网站数据的抓取、筛选操作。(4)JSON库,它是一种轻量级的数据交换格式,采用对象和数组的组合形式表示数据,用于将数据对象编码为JSON格式进行输出或存储,再将JSON格式对象解码为Python对象。
2 网页爬虫
2.1 爬取网站上的相关信息:爬取网站“京东”的首页,并且输出到文件中运用爬虫技术的一般流程,按照要求,运用 Python 提供的相关库的函数,按照步骤完成。
相关的步骤及代码如下。
# 导入 requests 库
import requests
# 请求的 URL
url="https://www.jd.com/index/index.html"
# 请求的报头
headers ={"User -Agent":"Mozilla/5.0 (Windows NT 10.0;
WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/
51.0.2704.103 Safari/535.1 "}
# 发送 GET 请求,返回响应对象
response=requests.get(url, headers=headers)
# 输出响应的内容
print(response.text)
# 运行结果(部分内容)如下。
京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!initial-scale=1.0, maximum-scale=1.0, user-scalable=yes"/>
href = "//misc.360buyimg.com/mtd/pc/index_2019/1.0.1/
static/css/first-screen.chunk.css" rel="stylesheet"/>
href = "//misc.360buyimg.com/mtd/pc/index_2019/1.0.1/
static/css/index.chunk.css" rel="stylesheet"/>
window.point.css = new Date().getTime()
网站导航
手机京东
href="https://fresh.jd.com/"
1X36PoLQQ6JYgrLusHZpfowpxpc/index.html">电动车十大品牌排行榜
href = "//pro.m.jd.com/mall/active/
3uxWVvqh2dmwN2eLbqDfGj6BBoAk/index.html">台铃电动车
2.2 爬取网站上的图片
爬取网站“豆瓣”首页的电影图片,并且输出到文件中编写的代码及步骤如下。
import urllib.request
import re
url = 'https://movie.douban.com/top250'
request = urllib.request.Request(url)
request.add_header('User-Agent',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/
537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36')
response = urllib.request.urlopen(request)
buf = response.read()
buf = str(buf, encoding='utf-8')
# 获取所有图片 url 地址列表
listurl = re.findall(r'http.+\.jpg', buf)
print(listurl)
i = 1
for url in listurl:
f = open(str(i) + '.jpg', 'wb+')
req = urllib.request.urlopen(url)
buf = req.read()
f.write(buf)
i += 1
# 运行结果,所爬取的图片(部分)如图 1。
图 1 爬取的图片
2.3 爬取相关的网页
爬取网站“百度”上带有关键词”学习强国”的相关网页,并且输出到文件中编写的代码及步骤如下。
import requests
url="http://www.baidu.com"
param={"wd":"学习强国"}
headers ={"User -Agent":"Mozilla/5.0 (Windows NT 10.0;
WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/
51.0.2704.103 Safari/535.1 "}
response =requests.get (url,params =param,headers =headers)
print(response.text)
# 运行过程如图 2,运行结果(部分内容)如下。
src = "https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/
superman/js/lib/jquery -1 -edb203c114.10.2.js" ><
script type="text/javascript"
src = "https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/
superman/js/lib/esl -d776bfb1aa.js" >
list=$.extend({},s_domain.ssllist);$.each(list,function(i,e){if(list[i].indexOf("https://")<0){list[i]="https://"+list[i]}});var
get=function(url){if(s_domain.protocol=="http:"){return url}var
reg=/^(http[s]?:\/\/)?([^\/]+)(.*)/,matches=url.match(reg);url=list.
hasOwnProperty(matches[2])&&list[matches[2]]+matches[3] ||
url;return url},
defer src="//hectorstatic.baidu.com/cd37ed75a9387c5b.js">
script>