Python爬虫入门小记

Python爬虫入门小记

从早就像接触到了爬虫,感觉是个很好玩的东西。最近终于有时间体验了一把。整个过程不需要特别的精通Python只需要对常用的几个指令熟悉就好。由于喜欢看NBA比赛,但是又不想每次去网站上查询比赛的时间,因此想着如果能通过一个程序自动帮我查询比赛时间就好了。基于此做了一下应用,即通过微信手机端发送相关指令给特定账号,返回需要的信息。现将整个过程做简要总结如下。

  • 开发环境

win10 64位操作系统

Python3.6 Anaconda 4.3.0

IDE:Pycharm

PhatomJS:一个没有界面的浏览器。下载后放到System32中,若不能用则需要自己配置环境变量(Path)。

*********下面的东西不用自己下载安装,一会说明通过指令即可自动安装***********

ItChat:一个开源的微信个人号接口,可以通过Python调用

Selenium:一个集成测试的强大工具。可以用来填充密码,模拟按键操作。 

BeautifulSoup:解析网页。

  • 环境配置安装

软件的装不再详细介绍,直接从itChat的安装进行。由于我电脑上已经安装了,没安装的话整个过程均自动完

成。剩下的指令按顺序输入即可。

     pip install itchat
     conda install beautifulsoup4
     pip install selenium


  • 爬取实战

首先看下需要爬取的网站情况,爬取网站首先应该先对网站进行分析,看是否是动态加载的。由于本人对HTML语言也不了解,不过分析网站结构并不需要精通HTML,触类旁通找到方法见招拆招即可。看过比赛的应该都听说过直播吧吧,这里有需要的比赛时间信息。选择要爬取的内容右键-->审查元素即可看到你需要的信息。仔细看下会发现有些网站分类非常明确,一层对应一个部分,首先应当对结构进行合理的分析才能加快爬取的速度与准确度。这个过程只要多看几遍审查元素里面的内容就行了。


下一步就可以写代码了。这里直接将代码帖出来。整个过程很简单主要是对目标信息的定位。在schedule_container left的类中提取所有的box之后遍历其中所有和骑士有关的比赛,并将日期及对阵双方存在字符串中输出。

from selenium import webdriver  #导入Selenium的webdriver
from bs4 import BeautifulSoup
# 新建一个类
class zhiboba():

    def __init__(self):
        self.url = "http://www.zhibo8.cc/" #网址
    # 用于获取网页数据
    def info_get(self,url):
        # 通过PhantomJS进行网页请求
        driver = webdriver.PhantomJS()
        driver.get(url)
        driver.set_page_load_timeout(1)
        return driver.page_source

    def run(self):
        html = self.info_get(self.url)
        text = '***近期骑士比赛日程表***\n'
        # 获取比赛预告区
        all_box = BeautifulSoup(html, 'lxml').find(class_='schedule_container left').find_all(class_='box') 
        for box in all_box:
            all_li = box.find_all('li')
            for li in all_li:
                temp = li.get_text()
                if '骑士'in temp:
                    # 过滤掉没有更新直播链接的比赛
                    if'互'in temp:
                        text = text + '--------' + box.find('h2')['title'] + ' '
                        text = text + temp[0:temp.index('互')].replace(' ', '--------\n', 1) + '\n'
        print(text)
zhibo8 = zhiboba()
zhibo8.run()

  • itChat调用

爬取到信息怎么才能通过合适的方式发送到手机上呢?尝试过短信但是但部分貌似都是收费的,这里使用了itChat实现用微信发送通知实现手机与爬虫的交互应用。itChat网站上有个很好玩的应用即通过图灵机器人接口实现一个聊天机器人,代码如下。运行过程中扫码登陆,和电脑端登陆微信一样,之后通过图灵机器人接口自动返回信息,很好玩的一个应用。KEY可以自己去图灵机器人网站免费申请。注:这里需要两个微信账号,手机端登陆一个电脑端登陆一个。

#coding=utf8
import requests
import itchat

KEY = '8edce3ce905a4c1dbb965e6b35c3834d'

def get_response(msg):
    # 这里我们就像在“3. 实现最简单的与图灵机器人的交互”中做的一样
    # 构造了要发送给服务器的数据
    apiUrl = 'http://www.tuling123.com/openapi/api'
    data = {
        'key'    : KEY,
        'info'   : msg,
        'userid' : 'wechat-robot',
    }
    try:
        r = requests.post(apiUrl, data=data).json()
        # 字典的get方法在字典没有'text'值的时候会返回None而不会抛出异常
        return r.get('text')
    # 为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常
    # 如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return
    except:
        # 将会返回一个None
        return

# 这里是我们在“1. 实现微信消息的获取”中已经用到过的同样的注册方法
@itchat.msg_register(itchat.content.TEXT)
def tuling_reply(msg):
    # 为了保证在图灵Key出现问题的时候仍旧可以回复,这里设置一个默认回复
    defaultReply = 'I received: ' + msg['Text']
    # 如果图灵Key出现问题,那么reply将会是None
    reply = get_response(msg['Text'])
    # a or b的意思是,如果a有内容,那么返回a,否则返回b
    # 有内容一般就是指非空或者非None,你可以用`if a: print('True')`来测试
    return reply or defaultReply

# 为了让实验过程更加方便(修改程序不用多次扫码),我们使用热启动
itchat.auto_login(hotReload=True)
itchat.run()
之后就可以通过这个程序稍加改进,将刚写的zhiboba的程序稍微改进下(即将加载字符串改成返回字符串)复制进来,对微信发来的信息进行判断(这里将欧文设置为关键字),就可以实现通过微信查询比赛时间了。

def tuling_reply(msg):
    # 为了保证在图灵Key出现问题的时候仍旧可以回复,这里设置一个默认回复
    defaultReply = 'I received: ' + msg['Text']
    # 获取发件人名字 每次登陆都不一样 只接受第一个人的名字
    global toUserName

    # 如果图灵Key出现问题,那么reply将会是None
    if '欧文' in msg['Text']:
        reply = zhibo8.run()
    else:
        reply = get_response(msg['Text'])
    # a or b的意思是,如果a有内容,那么返回a,否则返回b
    # 有内容一般就是指非空或者非None,你可以用`if a: print('True')`来测试
    return reply or defaultReply

  • 总结

有些网页可能没有这么简单,有动态加载的内容,这个时候就需要切换相应的frame进行操作,这里先不记录了。Python有邮箱检测功能,我用网页的方式写了一个自动填充密码登陆检测邮箱的程序,每隔半个小时查询一次,若有新邮件则给我微信发送知。当然还有很多好玩的用法,以后再做总结。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值