Python——爬取网页信息 Ⅱ


01. Fiddler抓包工具的配置

  1. 下载完成后,通过 ToolsOptions 打开选项。
    pic01
  2. 切换到 HTTPS 标签。
    pic02
  3. 点击 Action
    pic03
  4. 弹出的对话框选 Yes
    pic04
  5. 重启Fiddler。
  6. 如果出现如下问题,修改爬虫代码。
    pic05
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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值