Python——爬取网页信息 Ⅱ
01. Fiddler抓包工具的配置
- 下载完成后,通过 Tools → Options 打开选项。
- 切换到 HTTPS 标签。
- 点击 Action 。
- 弹出的对话框选 Yes。
- 重启Fiddler。
- 如果出现如下问题,修改爬虫代码。
from urllib import request, parse
import ssl # 添加此import
# 加载一个页面
def loadPage(url):
# 发起请求
req = request.Request(url)
# 创建一个未经过验证的上下文(添加)
context = ssl._create_unverified_context()
# 打开响应的对象(添加context)
response = request.urlopen(req, context = context)
# 获取响应的内容
html = response.read()
# 对网页进行解码
content = html.decode('utf-8')
return content
02. 随机伪装代理器
#coding=utf-8
from urllib import request
import ssl
import random
ua_list = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
'Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50'
]
# 加载一个页面
def loadPage(url):
# 随机选一个User-Agent
userAgent = random.choice(ua_list)
headers = { # 伪装代理器
'User-Agent':userAgent
}
# 发送请求
req = request.Request(url, headers = headers)
# 创建一个未经过验证的上下文
context = ssl._create_unverified_context()
# 打开响应的对象
response = request.urlopen(req, context = context)
# 获取响应的内容
html = response.read()
# 对网页进行解码
content = html.decode('utf-8')
return content
03.安装selenium插件
在cmd中输入pip install selenium
04. 安装phantomjs无界面浏览器
解压phantomjs压缩包,把bin所在的目录添加到环境变量PATH路径下。
启动cmd命令行,确保输入phantomjs可以进入phantomjs命令行。
05. 访问百度页面并进行搜索和截图
#coding=utf-8
# 导入selenium
from selenium import webdriver
# 通过浏览器加载网页
driver = webdriver.PhantomJS()
# 打开网页
driver.get('https://www.baidu.com')
# 截图
driver.save_screenshot('baidu/baidu1.png')
# 找到要搜索的输入框控件
driver.find_element_by_id('kw').send_keys('梁朝伟')
# 截图
driver.save_screenshot('baidu/baidu2.png')
# 找到要点击的控件
driver.find_element_by_id('su').click()
# 延迟一秒,等搜索结果出来
import time
time.sleep(1)
# 截图
driver.save_screenshot('baidu/baidu3.png')
06. 获取直播网站房间数和人气值以及页面总数
# coding=utf-8
# 导入selenium工具
from selenium import webdriver
from lxml import etree
class Huya(object):
# 初始化
def __init__(self):
# 通过浏览器加载网页
self.driver = webdriver.PhantomJS()
# 要统计的数量
self.room_count = 0 # 房间数量
self.hot_count = 0 # 热度
# 获取房间名和人气
def run(self):
# 打开网页
self.driver.get('https://www.huya.com/l')
# 爬取相关的内容
content = etree.HTML(self.driver.page_source)
rooms = content.xpath('//li[@class="game-live-item"]')
for room in rooms:
# 获取房间名称
tmp = room.xpath('./a[@class="title new-clickstat"]/text()')
roomname = tmp[0]
# 获取人气
tmp = room.xpath('./span[@class="txt"]/span[@class="num"]/i[@class="js-num"]/text()')
hot = tmp[0]
print('人气:'+str(hot)+';房间:'+roomname)
# 增加房间数量
self.room_count += 1
# 增加人气数量
if hot[-1] == '万':
hot = hot[:-1]
hot = int(float(hot) * 10000)
self.hot_count += hot
else:
hot = int(hot)
self.hot_count += hot
# 输出结果
print('当前直播房间数量:',self.room_count)
print('当前人气总数:',self.hot_count)
# 遍历页数
def test(self):
# 打开网页
self.driver.get('https://www.huya.com/l')
# 循环遍历每一页
page = 0
import time
while True:
# 延迟一点
time.sleep(1)
page += 1
# 尝试查找laypage_next
ret = self.driver.page_source.find('laypage_next')
if ret >= 0:
print('第'+str(page)+'页')
else:
print('最后一页')
break
# 点击下一页按钮
self.driver.find_element_by_class_name('laypage_next').click()
if __name__ == '__main__':
huya = Huya()
# huya.run()
huya.test()