Python 爬虫

1. 说明

  做数据挖掘常常需要抓取网页内容,有些工具能通过分析 url 中的链接,把整个网站抓下来,也就是我们常说的爬虫工具。

  有时候需要把交互网页的内容抓下来,比如:在 input 框中输入想查的内容,服务器端实时计算结果,或者从数据库中查询后返回结果。像整句翻译功能,查询食物的热量等等。下面介绍 Python 用 GET 和 POST 方式抓取实时内容的方法。

2. GET 方式

 GET 方式把要查询的参数放在 url 地址中,非常简单。下例用 Python 程序,查询运单信息,写法如下:

1
2
3
4
5
6
import urllib.request  

url = 'http://cha.xxx.cn/?stype=kd&q=123456'
req = urllib.request.Request(url)
html = urllib.request.urlopen(req).read()
print(html.decode("utf8"))

 GET 方式,用问号和等号“addr?key=value”的方式,以明文的方式,向服务器传送要查询的内容。此时,就能打印出 html 网页的内容了。由此可见 python 的网络工具真的很方便。

  有时候需要查询一些中文信息,比如查询樱桃的卡路里,需要字换中文字符,可使用以下方法:

1
2
3
4
5
6
7
8
9
10
11
12
#-*- coding:utf-8 -*-

import urllib.request
import urllib.parse

url = "http://www.xxx.com/food/search"
postdata = urllib.parse.urlencode({
"keyword":"樱桃"
}).encode("utf-8")
req = urllib.request.Request(url,postdata)
html = urllib.request.urlopen(req).read()
print(html.decode("utf8"))

3. POST 方式

 POST 方法相对复杂一些,常用它传送用户名,密码等不可见的参数,使用它的主要问题是:不知道程序定义的关键字 key 是什么。一般可以通过查看页源码,看它表单的 input 中如何定义,但有时候源码中调用其它程序实现,不能直接看到关键字,下面介绍如何使用浏览器提供的工具,查看本地与服务器的交互信息,以确定关键字。

  在浏览器中打开翻译网站(最好使用 chrome 或 chromium),按 F12 打开调试工具。选择其中的 Netword 选项卡。

  在输入框中输入要翻译的内容“樱桃”,点“翻译”按钮时,查看调试工具中最核心的步骤是检测当前语言”langdetect”和翻译”v2transapi”,点击该项,即可以查看请求的具体内容和返回值。以检测当前语言为例,其中请求内容中就有其 request url(http://fanyi.baidu.com/langdetect),以及关键字 (post 参数 query)。把它们设置在 Python 中即可,具体方法如下:

1
2
3
4
5
6
7
8
# coding:utf-8  

import requests

url = "http://fanyi.xxx.com/langdetect"
d = {"query":"樱桃"}
r = requests.post(url, data=d)
print(r.text)

  此时,返回的是 json 串,数据少容易解析。

4. 参考

 Python 网络爬虫(Get、Post 抓取方式)

https://blog.csdn.net/fly_yr/article/details/49005033