Python网络数据采集基本内容与工具

网络数据采集的基本内容

  • 向指定地址发起请求获取响应,结果可能是HTML源码、API结果数据、多媒体文件等
  • 对拿到的结果进行处理,比如,对内容进行提取关键数据、分析主题、存到数据库等等
  • 当从取到的HTML源码拿不到需要的数据时,比如,使用像AngularJS这样的动态生成元素的网页,需要在浏览器环境中等待JS执行完成后再去爬取信息
  • 如果访问地址需要登录权限。除了主动拿到cookie信息外,有些库已经提供了会话层面的API,可以直接发起后续请求
  • 如果发起的请求需要验证码,可以使用图形处理库进行分析

相关工具介绍

使用内置的请求模块包urllib发起请求

urllib包含以下四个模块:
1. urllib.request 请求和读取URL
2. urllib.error 定义了urllib.request使用的异常
3. urllib.parse 解析URL
4. urllib.robotparser 解析robots.txt。该文件可以让爬虫了解网站的爬取限制和网站地图

使用Python发起请求,拿到HTML源码:

from urllib.request import urlopen
html = urlopen("http://desk.zol.com.cn/")
print(html.read())

如果请求的是多媒体文件,可以urlretrieve将其保存到本地:

from urllib.request import urlretrieve

urlretrieve(downloadLink,filePath)
使用第三方库BeautifulSoup解析HTML

Beautiful Soup 是一个很强大的HTML/XML解析工具,使用它可以很方面的对页面元素进行搜素和修改。
使用需要先安装它,一种方法就是直接通过pip安装:

pip install beautifulsoup4

下面是一个简单的列子,更多定位页面元素的方法请参考文档。

# 使用前先导入
from bs4 import BeautifulSoup
......
# 加载页面并解析
page = urlopen(url)
pageObj = BeautifulSoup(page.read(), "html.parser")
# 获取带有指定class属性的a元素
for link in pageObj.findAll("a",{"class":"pic"}):
    if 'href' in  link.attrs:
        ......
#取到链接之后可以继续爬取
数据清洗与自然语言工具包NLTK

通常情况下,从页面从拿到的文本内容很有可能并不是我们需要的样式,或者不是很符合预期,这样就需要先进行清洗,比如过滤掉空白符,大小写转换、提取连续单词组等等。

《Python网络数据采集》里面提到使用自然语言工具包NLTK,可以对一段文字进行单词数量、单词频率以及单词词性进行统计等,这里做下记录作为备用。

使用Requests 第三方库进行复杂HTTP请求

Requests 相比Python标准库更加方便,功能也更多样。通过它可以定制请求头、获取json响应、二进制响应等等。

1.发起POST请求:

import requests
payload = {'key1': 'value1', 'key2': 'value2'}
requests.post("http://httpbin.org/post", data=payload)

2.上传文件请求:

files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
requests.post(url, files=files)

3.Cookie

# 取cookie值
r = requests.get(url)
r.cookies['example_cookie_name']

# 指定cookie发起请求
cookies = dict(key='value')
r = requests.get(url, cookies=cookies)

4.使用会话层面的API
使用session对象可以很方面的进行持续发起后续请求,不需要手动维护cookie信息

session = requests.Session()
params = {' username': 'username', 'password': 'password'}
session.post(loginUrl, params)
# session会持续跟踪会话信息,比如cookie、header、http协议等等
session.get(otherUrl)

更多操作请访问参考文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

Selenium处理动态HTML与客户端JS

PhantomJS不是Python的库,它需要单独安装。这里取了一段官网的介绍:

PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.

注:当前Selenium使用PhantomJS将报告过时,可以参考Selenium webdriver部分

它并不会向用户展示实际的页面效果,但是它可以加载页面并执行JavaScript。

Selenium是一个第三方库,可以使用pip安装,并可与PhantomJS配合使用。两者配合就可以获取动态HTML的内容,可以组建一个较为完备的爬虫程序了。

使用pip安装时,注意使用国内源,不然很慢甚至超时。这里提供几个链接使用阿里云镜像:
- linux环境可以直接参考阿里云镜像站/pypi的帮助
- windows环境请参考链接 https://blog.csdn.net/ipaomi/article/details/78466321

使用时指定PhantomJS的路径即可:

browser = webdriver.PhantomJS(executable_path=PHANTOM_JS_PATH)
river.get(url)
print(driver.page_source)

通过page_source即可拿到加载后的HTML源码,这里根据网页的实现决定是不是需要等待,更复杂的页面实现的加载方式可以参考官方文档。

图片验证码的识别后面有时间再补充,本人同时是Python的网络爬虫的小白,哪里有问题麻烦帮忙补充下。

注:这里只是在读过《Python网络数据采集》之后的一次记录,用作以后备用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值