Python爬虫的小项目
需求
- 爬取最近一期的双色球号码
- 按固定格式推送到用户
- “第2018040期 红 02 16 18 19 27 30 蓝 14”
想法
- 利用爬虫框架爬取
- 库 – requests、BeautifulSoup
- 调用短信发送框架快速发送
- twilio短信发送平台
- 利用爬虫框架爬取
实际操作
爬取
- 直接爬取福彩官网”http://www.cwl.gov.cn“
- 利用搜索引擎接口,搜索关键词然后获取结果
- 搜索接口
- 代码框架
1
2
3
4
5
6
7
8
9
10
11
12import requests
keyword = "福彩双色球"
try:
kv = {'wd' : keyword}
r = requests.get("http://www.baidu.com/s", params=kv)
print(r.request.url)
r.raise_for_status()
r.encoding = r.apparent_encoding
# TODO
print(r.text[-500:])
except:
print("爬取失败")
信息提取
- BeautifulSoup库
- 查找标签然后固定提取目标信息
- BeautifulSoup库
- 短信发送
- Twilio官网
- 注册账号
- 获取账户SID和AUTH(认证)标志
- 建立第一个项目并获取免费手机号
- 代码框架
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 使用Twilio的免费手机号发送短信
def send_sms(msg, my_number):
# 从官网获得以下信息
account_sid = 'xxxx'
auth_token = 'xxxx'
twilio_number = 'xxxx' # 带世界级区号
client = Client(account_sid, auth_token)
try:
client.messages.create(to=my_number, from_=twilio_number, body=msg)
print('短信已经发送!')
except ConnectionError as e:
print('发送失败,请检查你的账号是否有效或网络是否良好!')
return e
- Twilio官网
遇到问题Bug
- BeautifulSoup库的API不熟
- 电话号码格式
TwilioRestException: Unable to create record: The 'To' number 1817127xxxx is not a valid phone number.
- 报错如上
- 加区号
- “1817127xxxx” –> “+861817127xxxx”
反思
- 不太熟悉BeautifulSoup库API,用的查找是硬代码
- 部署及定期(如周二、周四、周日)推送功能还没有实现