爬虫第二弹 代码操作

2017-08-09  本文已影响0人  程猿先生

代码操作一 爬取 贴吧战狼2 网页信息

# -*- coding:utf-8 -*-

# 引入需要的模块
import urllib # 用于进行中文编码
import urllib2 # 用于进行爬虫核心处理的


# 定义一个函数,用于爬取对应的数据
def load_url(url, file_name):
    """
    作用:针对指定的url地址,进行数据的获取
    :param url: 要爬取数据的具体url地址
    :param file_name: 要保存到的文件名称:在当前函数中,只做提示使用
    :return:  爬取到的数据
    """
    print("~~~~~~~~~~~~开始爬取%s的内容~~~~~~~~~~~~" % file_name)
    # 爬取程序
    my_headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.7 Safari/537.36"
    }
    request = urllib2.Request(url, headers=my_headers)

    content = urllib2.urlopen(request).read()

    print("#####爬取%s的内容完成#####" % file_name)

    return content


# 定义一个函数,用于保存数据
def save_data(data, file_name):
    """
    作用:主要是用来进行数据的存储的
    :param data: 要存储的数据
    :param file_name:  要存储的文件名称
    :return:  无
    """
    print("~~~~~~~~~~~~开始保存%s的内容~~~~~~~~~~~~" % file_name)

    with open(file_name, "w") as f:
        f.write(data)

    print("#####保存%s的内容完成#####" % file_name)

# 定义函数,用于进行爬虫的核心处理功能
def spider(url, kw, begin, end):
    """
    作用:用于进行核心爬虫功能的调度【领导】
    :param url: 要爬取的地址
    :param kw: 贴吧名称
    :param begin: 起始页码
    :param end: 结束页码
    :return: 无
    """
    for page in range(begin, end+1):
        # 计算需要的页码
        pn = (page - 1) * 50
        # 进行kw参数的编码
        kw = urllib.urlencode({"kw":kw})
        # 拼接url地址
        full_url = url + kw + "&pn=" + str(pn)
        # 定义一个保存文件的名称
        file_name = "-----" + str(page) + "----.html"
        # 开始爬取数据
        html = load_url(full_url, file_name)
        # 保存数据到文件
        save_data(html, file_name)

# 主程序运行入口
if __name__ == "__main__":
    """
        主程序运行入口函数
    """
    # 用户输入相关数据
    url = "http://tieba.baidu.com/f?"
    kw = raw_input("请输入要爬取的贴吧名称:")
    begin = int(raw_input("请输入开始页码:"))
    end = int(raw_input("请输入结束页面:"))

    # 调用爬虫开始执行
    spider(url, kw, begin, end)

运行结果:


Paste_Image.png

代码操作二

百度图片 爬取美女图网页

# -*- coding:utf-8 -*-

import urllib
import urllib2

# 请求url地址
url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E9%9D%92%E7%BA%AF%E7%BE%8E%E5%B0%91%E5%A5%B3%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word=%E9%9D%92%E7%BA%AF%E7%BE%8E%E5%B0%91%E5%A5%B3%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=150&gsm=96&rn=30&1502176187727="

# 请求头描述信息
header = {
"Accept" : "text/plain, */*; q=0.01",
"X-Requested-With" : "XMLHttpRequest",
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.7 Safari/537.36"
}

# 包装个请求对象
request  = urllib2.Request(url, headers= header)

# 根据请求对象发送数据请求,获取服务器返回的响应对象
response = urllib2.urlopen(request)

# 获取响应对象中的数据
content = response.read()

# 将获取到的数据保存在文件中
with open("girls.json", "w") as f:
    f.write(content)

结果展示

Paste_Image.png

代码操作三 post请求爬取豆瓣电影网站页面

# -*- coding:utf-8 -*-

# 引入需要的库
import urllib
import urllib2

# 要访问的url地址
url = "https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10"

# 要传递的Post方式的数据,有可能会有多组数据
submit_data = {
    "start":20,
    "tags":"喜剧"
}
# 编码
data = urllib.urlencode(submit_data)

# 构造请求头信息,创建请求对象
headers = {
    "Accept" : "application/json, text/plain, */*",
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.7 Safari/537.36",
    "Accept-Language" : "zh-CN,zh;q=0.8"
}

request = urllib2.Request(url, data, headers)

# 发送请求,获取服务器响应数据
response = urllib2.urlopen(request)

# 获取爬取到的数据
content = response.read()

# 保存数据
with open("movies.json", "w") as f:
    f.write(content)

结果展示:

Paste_Image.png

代码操作四 爬取须登录的网页qq空间

# -*- coding:utf-8 -*-

# 引入需要的模块
import urllib
import urllib2

url="https://user.qzone.qq.com/153513634--/infocenter"

my_header = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.7 Safari/537.36",
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Language" : "zh-CN,zh;q=0.8",
"Cookie": "153513634_################"
}

request = urllib2.Request(url, headers = my_header)

response = urllib2.urlopen(request)

html = response.read()

with open("qzone_1007821300.html", "w") as f:
    f.write(html)

结果展示:

Paste_Image.png
上一篇下一篇

猜你喜欢

热点阅读