Python 爬虫-登录,长连接,Ajax, 下载

可视化操作软件

1. 八爪鱼

完全可视化操作,简单易用。

2. 集搜客

与八爪鱼相比,更接近网页的原始代码,且开源。比Python 爬虫简单,比八爪鱼复杂



Python 爬虫

必备工具

带有开发者工具的浏览器,如Chrome, Firefox, 360等
以Firefox火狐浏览器为例,可以打开想要爬取的网页,右击选择“查看元素”,选择样式查看器(Ctrl+Shift+C)就可以浏览网页结构

1. 无需登录,直接爬取静态网页

1.1 Post

import requests

#伪装成浏览器,可以通过“网络”--》消息头--》请求头看到
userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
header = {
    # "origin": "",
    "Referer": "",
    'User-Agent': userAgent,
}

url = ''
html = requests.post(url, headers = header)
print(html.content)

1.2 Get

import requests
#伪装成浏览器,可以通过“网络”--》消息头--》请求头看到
userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
header = {
    # "origin": "",
    "Referer": "",
    'User-Agent': userAgent,
}
url = ''
html = requests.get(url, headers = header)
print(html.content)

2. 爬取登录后的页面

import requests
#伪装成浏览器,可以通过“网络”--》消息头--》请求头看到
userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
header = {
    # "origin": "",
    "Referer": "",
    'User-Agent': userAgent,
}
data = {
            "username":username,
            "password":password
            }
url = ''
html = requests.post(url, data = data, headers = header)
#data 和 headers 参数同时出现,此处存疑,应该没问题,试验一下

3.登录后需要访问其他页面,长连接

在requests库中,HTTP的长连接是通过Session会话实现的。

import requests
#伪装成浏览器,可以通过“网络”--》消息头--》请求头看到
userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
header = {
    # "origin": "",
    "Referer": "",
    'User-Agent': userAgent,
}
data = {
            "username":username,
            "password":password
            }
s = requests.session()
url_1 = ''
html_1 = s.post(url_1, data = data, headers = header)
url_2 = ''
html_2 = s.get(url_2, headers = header)
print(html_2.content)

4. Ajax

AJAX=Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下,对网页的某部分进行更新。传统的网页(不使用AJAX)如果需要更新内容,必需重载整个网页。
Ajax技术的核心是XMLHttpRequest对象(简称XHR,即AJAX创建XMLHttpRequest对象,并向服务器发送请求),可以通过使用XHR对象获取到服务器的数据,然后再通过DOM将数据插入到页面中呈现(AJAX加载出来的数据通过浏览器渲染显示)。虽然名字中包含XML,但Ajax通讯与数据格式无关(是一种网页制作中的一种方法、技术),所以我们的数据格式可以是XML或JSON等格式。
Ajax一般返回的是json格式数据,直接使用requests对ajax地址进行post或get(下载),返回json格式数据,解析json数据即可得到想要获取的信息(解析)。

我们如果使用 AJAX 加载的动态网页,怎么爬取里面动态加载的内容呢?一般有两种方法:

方法一、通过selenium模拟浏览器抓取

方法二、通过浏览器审查元素解析地址

此处重点关注方法二
使用火狐浏览器,打开目标网页,右击选择“查看元素”(Inspect Elements),选择“网络”(Network)选项,选择“HTML”(针对静态页面)和XHR(针对Ajax)。单击加载内容的选项,注意观察网络选项页面变化。
找到其中新出现的内容,从“消息头”中找到“请求网址”,作为基础网址,然后点开“参数”选项,根据里面的参数,构造新的网址。然后利用指定的请求类型(post/get)对构造的网址发送请求,然后接收反馈的json内容。

import requests
import urllib
from urllib.parse import urlencode
#伪装成浏览器,可以通过“网络”--》消息头--》请求头看到
userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
header = {
    # "origin": "",
    "Referer": "",
    'User-Agent': userAgent,
}
data = {
            "username":username,
            "password":password
            }
s = requests.session()
url_1 = ''
html_1 = s.post(url_1, data = data, headers = header)
url_2 = ''
html_2 = s.get(url_2, headers = header)
print(html_2.content)
params = {}
base_url = ''
html_3 = s.get(base_url+'/?'+params, headers = headers).json()

5.对网页中的下载链接进行解析并下载

直接访问该链接,然后

file = login_session.get(base_url+file_url)
with open(data_path+'/'+file_name,"wb") as f:
       f.write(file.content)
f.close()

改文章有时间还要继续完善

下一期可以从GBDT+LR(sklearn)或者Multi-label Classification(Keras)二选一

你可能感兴趣的:(Python 爬虫-登录,长连接,Ajax, 下载)