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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值