Python网络爬虫

爬取商城网站数据

实际中很多网站的网页都不是静态的HTML文档,很多信息都是通过 JavaScript程序处理后才显示出来的动态数据,使用普通的爬虫程序不能爬取这些动态数据。Selenium就是这样一种能模拟浏览器执行JavaScript程序的工具。本项目介绍如何使用Selenium 编写爬虫程序来爬取商城网站动态手机数据。

一、创建任务项目

使用浏览器访问京东商城网站,在搜索文本框中输入“手机”后按Enter键,可以看到图5-1-1所示的页面。分析京东商城的网页发现,很多数据是由JavaScript 程序控制的。在这个项目中将使用selenium设计一个爬虫程序来爬取所有的手机数据与图像。

在爬取京东商城网站数据之前先创建爬取模拟商城网站的数据。创建项目文件夹 project5,在 project5 文件夹中有一个phones.csv文件,文件中存储了手机的数据,其中前面几行数据如下:

1.创建网站模板

在 project5\templates文件夹中设计一个模板文件phone.html,它包含 3 个<span>: 第1个<span>的id 是“hMsg”,它的信息是确定的“Html Message”;第 2个<span>的 id是“jMsg”,它的信息是在网页加载时由JavaScript的程序赋予的值“javascript Message”;第3个<span>的id是“sMsg”,它的信息是在网页加载时通过Ajax的方法向服务器提出GET请求获取的,服务器返回字符串值“Server Message”。phone.html 模板文件如下:

2.创建网站服务器程序

服务器程序server.py显示出phone.html 文件的内容,其中,index(函数读取该文件并发送出去,show()函数在接收地址“/show”请求后发送“Server Message”。

3.使用浏览器访问

运行服务器程序server.py,使用浏览器访问“http://127.0.0.1:5000”,结果如图 5-2-1所示。

二、普通爬虫程序的问题

1. 编写普通客户端程序

编写一个爬虫程序spider.py,它通过urllib.request 直接访问“http://127.0.0.1:5000”,程序如下:

执行该程序,我们看到输出的结果如下:

得出结果就是phone.html文件。注意,在输出的结果中没有id="jMsg"与 id-"sMsg"的<span>的信息,这些信息在程序运行后产生。

2.编写普通爬虫程序

编写一个爬虫程序spider.py,它通过urllib.request 直接访问“http://127.0.0.1:5000”来获取 HTML代码,使用BeautifulSoup解析得到数据,程序如下:

执行该程序,结果如下:

Html Message

   显然,如果通过该方法获取网页的HTML代码并进行数据爬取,那么只能爬取 hMsg的信息“Html Message”,但是爬取不到jMsg与sMsg的信息。
   因为jMsg与sMsg的信息不是静态地嵌入在网页中的,而是通过JavaScript与Ajax动态产生的。通过urllib.request.urlopen得到的网页中没有这样的动态信息,如果要得到这些信息,就必须让爬虫程序能够执行对应的JsvaScript程序,selenium框架能实现这个功能。

3.安装selenium与Chrome 驱动程序

前面已经分析了要获取jMsg与sMsg的信息就必须使客户端在获取网页后能按要求执行对应的JavaScript程序。显然,一般的客户端程序没有这个能力去执行JavaScript程序,因此必须寻找一个能像浏览器那样工作的插件来完成这个工作,它就是selenium。selenium是一个没有显示界面的浏览器,它能与通用的浏览器(如Chrome、Firefox等)配合工作。下面安装selenium与Chrome的驱动程序。

(1)安装selenium

执行以下命令即可安装selenium。

pip install selenium

(2)安装Chrome的驱动程序

要想使selenium与浏览器配合工作,就必须安装浏览器对应的驱动程序。例如,要与 Chrome配合工作,就要先下载chromedrive.exe的驱动程序,然后把它复制到Python 的 scripts 目录下。

4.编写 selenium 爬虫程序

1.使用 selenium 获取网页的 HTML 代码按下列步骤编写客户端程序。

程序先从 selenium引入webdriver.并引入Chrome的驱动程序的选择项目Options:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

2.设置启动Chrome浏览器时不可见:

chrome_options.add_argument('--headless') 
chrome_options.add_argument('--disable-gpu')

3.创建Chrome 浏览器:

driver= webdriver.Chrome(chrome_options=chrome_options)

这样创建的Chrome浏览器是不可见的,如果仅仅使用: 

 driver= webdriver.Chrome()

创建 Chrome 浏览器,那么在程序执行时会弹出一个Chrome浏览器。

4.使用driver.get(url)函数访问网页: 

driver.get("http://127.0.0.1:5000")

5.通过driver.page_source获取网页的 HTML 代码: 

html=driver.page_source 
print(html)

6.使用driver.close()函数关闭浏览器:

driver.close()

根据这样的规则编写爬虫程序spider.py,如下:

由此可见,我们得到的HTML代码是执行完JavaScript程序后的代码,其中包含jMsg与sMsg的信息。

5.编写 selenium爬虫程序

selenium 模拟浏览器访问网站的方法来获取网页的HTML代码,然后从中爬取需要的数据,这样的爬虫程序功能就比较强大了。编写爬虫程序spider.py,如下:

执行该程序后,我们爬取到了所有数据:

Html Message
javascript Message 
Server Message

由此可见,selenium主要是模拟浏览器去访问网页,并充分执行网页中的JavaScript程序,使得网页中的数据被充分下载,这样再用爬虫程序去爬取数据就比较稳妥了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值