python爬虫小试

先说需求:
1、在django项目中需要更新新股的上市时间,但又不想手动去更新;
2、所以准备用爬虫技术去自动获取上市时间,然后自动更新数据库;
3、所幸找到了 天天基金网 有想要信息,例如新股 中铝国际 的详情页
http://data.eastmoney.com/xg/xg/detail/601068.html
这里写图片描述

1、工具安装

# 用pip方式安装 requests 与 beautifulsoup4
pip install requests
pip install beautifulsoup4

2、使用 requests 发送请求

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup

base_url = "http://data.eastmoney.com/xg/xg/detail/601068.html"
 # 设置请求头,模拟浏览器行为
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}

 # 发送请求并获取返回数据
response = requests.get(base_url, headers=headers)
 # 获取html网页源码
print response.text

浏览器请求头信息可以使用谷歌浏览器的开发者工具查看:
这里写图片描述
3、使用 beautifulsoup 解析html文档

 # 首先新建个BeautifulSoup对象,指定html解析器为python标准库自带的html.parser
soup = BeautifulSoup(response.text, 'html.parser')

 # 根据网页源码结构,获取到“申购状况”这个 table (第二个table)
sg_table_tag = soup.find_all("table")[1]

 # 获取对应的 tr  (第一个tr)
ss_tr_tag = sg_table_tag.tr

 # 获取对应的 td  (第五个td)
ss_td_tag = ss_tr_tag.find_all("td")[4]

 # 获取对应 td 的内容,并去除所有空格得到:2018-08-31 (周五)
ss_td_text = ss_td_tag.string.replace(" ", "")   

 # 截取上市时间:2018-08-31
print ss_td_text[:11]

4、编码问题

期间可能会遇到编码问题:
‘ascii’ codec can’t encode character u’\xa0’ in position 0: ordinal not in range(128)

我是这样解决的,希望对碰到的人有点帮助:

 # 截取上市时间:2018-08-31,但如果直接转换成时间格式会报编码错误
 ss_date = ss_td_text[:11]
 # 用下面这行代码解决的
 ss_date = ss_date.encode("utf-8").decode('ascii', 'ignore')
 # 顺利转换成日期格式
 ss_date = datetime.datetime.strptime(ss_date, "%Y-%m-%d").date()

5、结束语

完美结束,再结合django定时任务自动更新数据库即可。
只想说,python插件真是太强大啦。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值