Python数据分析与挖掘

一、爬虫入门

  网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

  运用python3.6中的urllib.request

1.快速爬取一个网页 

(1)get请求方式 

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:Du Fei
import urllib.request
# keywd = "python"
keywd ="百度"
#解决中文编码问题
keywd=urllib.request.quote(keywd)

url = "http://www.baidu.com/s?wd=" +keywd
req =urllib.request.Request(url)
#urlopen将网页存到内存
data =urllib.request.urlopen(req).read()

fh=open("F:/python/data/douban/2.html","wb")
fh.write(data)
fh.close()

(2)post请求方式

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:Du Fei
#post请求
#登录模拟

import urllib.request
import urllib.parse

url ="http://www.iqianyue.com/mypost/"
#对字段相应设置
mydata=urllib.parse.urlencode({
    "name":"[email protected]",
    "pass":"123ssd"
}).encode("utf-8")
req =urllib.request.Request(url,mydata)
data =urllib.request.urlopen(req).read()
fh =open("F:/python/data/douban/2_1.html","wb")
fh.write(data)
fh.close()

2.模拟浏览器访问

  应用场景:有些网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置,而我们又想进行爬取。 
  解决方法:设置一些Headers信息(User-Agent),模拟成浏览器去访问这些网站。

爬取淘宝高清图片

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:Du Fei
import urllib.request
import re
keyname="连衣裙"
#编码
key=urllib.request.quote(keyname)

#User-Agent    :Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/60.0
#伪装成火狐浏览器
headers=("User-Agent","Mozilla /5.0 (Windows NT 10.0; Win64; x6;rv:60.0) Gecko/20100101 Firefox/60.0")
#创建opener对象
opener = urllib.request.build_opener()
#添加报头
opener.addheaders=[headers]
#将opener添加为全局
urllib.request.install_opener(opener)

for i in range(0,1):
    #构造网址
    url ="https://s.taobao.com/list?spm=a217m.8316598.313651-static.30.3f8533d5oZ7vEf&q="+key+"&cat=50344007&style=grid&seller_type=taobao&bcoffset=12&s=" +str(i*60)
    data = urllib.request.urlopen(url).read().decode("utf-8", "ingnore")

    #定义正则
    pat = ‘pic_url":"//(.*?)"‘
    #图片网址
    image_list=re.compile(pat).findall(data)
    print(image_list)
    for j in range(0,len(image_list)):
        thisimg = image_list[j]
        thisimg_url ="http://" +thisimg
        file="F:/python/data/douban/img/" +str(i)+str(j)+".jpg"
        urllib.request.urlretrieve(thisimg_url,filename=file)

爬取CSDN数据

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:Du Fei
import urllib.request
import re
url ="http://blog.csdn.net/"
#伪装成浏览器
#User-Agent用户代理
headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36")
#创建opener对象
opener = urllib.request.build_opener()
#添加报头
opener.addheaders=[headers]
#将opener添加为全局
urllib.request.install_opener(opener)
#获取url数据
data =urllib.request.urlopen(url).read().decode("utf-8","ingnore")
pat =‘<a href="(.*?)" target="_blank" data-track‘
result=re.compile(pat).findall(data)
for i in range(0,len(result)):
    file = "F:/python/data/douban/csdn/" + str(i) + ".html"
    urllib.request.urlretrieve(result[i],filename=file)
    print("第"+str(i)+"爬取成功")

3.异常处理

  爬虫在爬取网站上的数据常见的错误:URLError和HTTPError

  脚本中加入异常处理机制使爬虫脚本更稳健。

爬取新浪新闻首页

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:Du Fei
"""
需求:将新浪新闻首页(http://news.sina.com.cn/)所有新闻都爬取到本地
思路:先爬首页,通过正则获取所有新闻链接,然后依次爬取新闻,并存储到本地
"""
import urllib.request
import urllib.error
import re
#获取首页
#urlopen将网页存到内存
data =urllib.request.urlopen("http://news.sina.com.cn/").read()
#获取的数据编码
data2=data.decode("utf-8","ignore")
pat =‘<a href="(http://news.sina.com.cn/.*?)"‘
allurl=re.compile(pat).findall(data2)
for i in range(0,len(allurl)):
    try:
        print("第"+str(i)+"次爬取")
        this_url=allurl[i]
        file="F:/python/data/douban/sinanews/" +str(i) + ".html"
        #网页下载到本地
        urllib.request.urlretrieve(this_url,file)
        print("---------------成功--------------")
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)

4.代理服务器

  (1)使用代理服务器的一般格式

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:Du Fei
#西祠免费代理IP
#http://www.xicidaili.com/
#183.167.217.152    63000
import urllib.request
import urllib.error
#代理服务器
def use_proxy(url,proxy_addr):
    try:
        #代理IP
        proxy=urllib.request.ProxyHandler({"http":proxy_addr})
        #创建opener对象
        opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
        #将opener添加为全局
        urllib.request.install_opener(opener)
        data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
        return data
    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)

proxy_addr="221.228.17.172:8181"
url="http://www.baidu.com"
data =use_proxy(url,proxy_addr)
print(len(data))

  (2)微信爬虫

  所谓微信爬虫,及自动获取微信的相关文章信息的一种爬虫。微信对我 们的限制是很多的,所以,我们需要采取一些手段解决这些限制,主要 包括伪装浏览器、使用代理IP等方式

#http://weixin.sogou.com/
import re
import urllib.request
import time
import urllib.error
import urllib.request
#自定义函数,功能为使用代理服务器爬一个网址
def use_proxy(proxy_addr,url):
    #建立异常处理机制
    try:
        req=urllib.request.Request(url)
        # 添加报头
        req.add_header(‘User-Agent‘, ‘Mozilla /5.0 (Windows NT 10.0; Win64; x6;rv:60.0) Gecko/20100101 Firefox/60.0‘)

        proxy= urllib.request.ProxyHandler({‘http‘:proxy_addr})
        # 创建opener对象
        opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler)
        # 将opener添加为全局
        urllib.request.install_opener(opener)
        # 获取req数据
        data = urllib.request.urlopen(req).read()

        return data
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
        #若为URLError异常,延时10秒执行
        time.sleep(10)
    except Exception as e:
        print("exception:"+str(e))
        #若为Exception异常,延时1秒执行
        time.sleep(1)

#设置关键词
key="Python"
#设置代理服务器,该代理服务器有可能失效,读者需要换成新的有效代理服务器
# proxy="127.0.0.1:8888"
proxy="221.228.17.172:8181"
#爬多少页
for i in range(0,10):
    key=urllib.request.quote(key)
    thispageurl="http://weixin.sogou.com/weixin?type=2&query="+key+"&page="+str(i)
    #a="http://blog.csdn.net"
    thispagedata=use_proxy(proxy,thispageurl)
    print(len(str(thispagedata)))
    pat1=‘<a href="(.*?)"‘
    rs1=re.compile(pat1,re.S).findall(str(thispagedata))
    if(len(rs1)==0):
        print("此次("+str(i)+"页)没成功")
        continue
    for  j in range(0,len(rs1)):
        thisurl=rs1[j]
        thisurl=thisurl.replace("amp;","")
        file="F:/python/data/weixin/第"+str(i)+"页第"+str(j)+"篇文章.html"
        thisdata=use_proxy(proxy,thisurl)
        try:
            fh=open(file,"wb")
            fh.write(thisdata)
            fh.close()
            print("第"+str(i)+"页第"+str(j)+"篇文章成功")
        except Exception as e:
            print(e)
            print("第"+str(i)+"页第"+str(j)+"篇文章失败")

5.多线程爬虫

  多线程,即程序中的某些程序段并行执行,合理地设置多线程,可以让爬虫效率更高。

  (1)普通爬虫(爬取糗事百科)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:Du Fei
import urllib.request
import re
import urllib.error

headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)

for i in range(1,2):
    try:
        #https://www.qiushibaike.com/8hr/page/1/
        url="https://www.qiushibaike.com/8hr/page/"+str(i)
        pagedata=urllib.request.urlopen(url).read().decode("utf-8","ignore")
        #<div class="content"><span></span></div>
        pat =‘<div class="content">.*?<span>(.*?)</span>.*?</div>‘
        #可能有多行 re.S
        datalist=re.compile(pat,re.S).findall(pagedata)
        for j in range(0,len(datalist)):
            print("第"+str(i)+"页第"+str(j)+"个段子的内容是:")
            print(datalist[j])
    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)
    except Exception as e:
        print(e)
        print("第" + str(i) + "页第" + str(j) + "篇文章失败")

    (2)多线程爬虫(爬取糗事百科)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:Du Fei
import urllib.request
import re
import urllib.error
import threading

headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)

class One(threading.Thread):
    #初始化
    def __init__(self):
        #初始化线程
        threading.Thread.__init__(self)
    #线程要做的事情
    def run(self):
        #奇数页
        for i in range(1,36,2):
            try:
                # https://www.qiushibaike.com/8hr/page/1/
                url = "https://www.qiushibaike.com/8hr/page/" + str(i)
                pagedata = urllib.request.urlopen(url).read().decode("utf-8", "ignore")
                # <div class="content"><span></span></div>
                pat = ‘<div class="content">.*?<span>(.*?)</span>.*?</div>‘
                # 可能有多行 re.S
                datalist = re.compile(pat, re.S).findall(pagedata)
                for j in range(0, len(datalist)):
                    print("第" + str(i) + "页第" + str(j) + "个段子的内容是:")
                    print(datalist[j])
            except urllib.error.URLError as e:
                if hasattr(e, "code"):
                    print(e.code)
                if hasattr(e, "reason"):
                    print(e.reason)

class Two(threading.Thread):
    #初始化
    def __init__(self):
        #初始化线程
        threading.Thread.__init__(self)
    #线程要做的事情
    def run(self):
        #偶数页
        for i in range(0,36,2):
            try:
                # https://www.qiushibaike.com/8hr/page/1/
                url = "https://www.qiushibaike.com/8hr/page/" + str(i)
                pagedata = urllib.request.urlopen(url).read().decode("utf-8", "ignore")
                # <div class="content"><span></span></div>
                pat = ‘<div class="content">.*?<span>(.*?)</span>.*?</div>‘
                # 可能有多行 re.S
                datalist = re.compile(pat, re.S).findall(pagedata)
                for j in range(0, len(datalist)):
                    print("第" + str(i) + "页第" + str(j) + "个段子的内容是:")
                    print(datalist[j])
            except urllib.error.URLError as e:
                if hasattr(e, "code"):
                    print(e.code)
                if hasattr(e, "reason"):
                    print(e.reason)

one =One()
one.start()

two=Two()
two.start()

自主学习Python数据分析与数据挖掘中爬虫入门总结。

参考网上教程:https://www.hellobi.com/

原文地址:https://www.cnblogs.com/coding2018/p/9452544.html

时间: 2024-10-30 06:05:56

Python数据分析与挖掘的相关文章

Python数据分析与挖掘所需的Pandas常用知识

Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series类似于Numpy中元素带标签的数组.其中,标签可以是数字或者字符串.一个dataframe是一个二维的表结构.Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签.你可以把它想象成一个series的字典项. Pandas常用知识 一.读取csv文件为dataf

数据分析学习资料《利用Python进行数据分析第2版》+《Python数据分析与挖掘实战》+《从零开始学Python数据分析与挖掘》

数据分析涉及统计学.线性代数.图形分析绘制.数据挖掘等知识,推荐系统学习电子资料<利用Python进行数据分析第2版>.<Python数据分析与挖掘实战>.<从零开始学Python数据分析与挖掘>电子书和代码测试. <利用Python进行数据分析第2版>电子书代码,每一章之间有递进关系,适合在Python入门<Python编程从入门到实践>电子书之后阅读,本专门针对数据分析领域的.我细致地读了一遍,敲了一遍代码,一开始没有头绪,进展缓慢,后来逐渐

Python 数据分析与挖掘的学习路径

0.前言 很多人反映在学习了Python基础之后无所适从,不知道下一步往哪走.作为较早期的跨界者(土木狗)深有体会.本文将结合上图,为后来者指明方向,可作为参考.在此强调:如果打算依靠Python逃离现有的工作(如土木施工),那就要认真想想自己打算做哪一方面的工作,互联网营销.前端.运维.爬虫.数据分析.数据挖掘.Web开发?强烈建议:直接上拉钩或者Boss直聘,针对性学习更为稳妥.如果打算业余玩玩,那跟着我们一起业余吧,嚯嚯~ .在入门学习大数据的过程当中有遇见学习,行业,缺乏系统学习路线,系

全体快三源码开发Python数据分析与挖掘所需的Pandas常用知识

前言 全体快三源码开发 (http://www.1159880099.com) QQ1159880099 Pandas基于两种数据类型:series与dataframe. 一个series是一个一维的数据类型,其中每一个元素都有一个标签.series类似于Numpy中元素带标签的数组.其中,标签可以是数字或者字符串. 一个dataframe是一个二维的表结构.Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签.你可以把它想象成一个series的字典项.

python数据分析&amp;挖掘,机器学习环境配置

目录 一.什么是数据分析 1.这里引用网上的定义: 2.数据分析发展与组成 3.特点 二.python数据分析环境及各类常用分析包配置 1.处理的数据类型 2.为什么选择python 三.python数据分析环境安装 1.Ipython 2.Jupyter 3.Anaconda安装器 4.Jupyter与集成开发环境与文本编辑器 三.常用数据分析包 1.NumPy 2.pandas 一.什么是数据分析 1.这里引用网上的定义: ???????数据分析是指用适当的统计分析方法对收集来的大量数据进行

Python数据分析之pandas学习

Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利用pandas的DataFrames进行统计分析5.利用pandas实现SQL操作6.利用pandas进行缺失值的处理7.利用pandas实现Excel的数据透视表功能8.多层索引的使用 一.数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Ser

Python数据分析案例(实战)视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

Python数据分析、数据采集、数据可视化、图像数据处理分析视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

数据分析、挖掘方面 推荐的好书

入门读物: 深入浅出数据分析 (豆瓣) 这书挺简单的,基本的内容都涉及了,说得也比较清楚,最后谈到了R是大加分.难易程度:非常易. 啤酒与尿布 (豆瓣) 通过案例来说事情,而且是最经典的例子.难易程度:非常易. 数据之美 (豆瓣) 一本介绍性的书籍,每章都解决一个具体的问题,甚至还有代码,对理解数据分析的应用领域和做法非常有帮助.难易程度:易. 数学之美 (豆瓣) 这本书非常棒啦,入门读起来很不错! 数据分析: SciPy and NumPy (豆瓣) 这本书可以归类为数据分析书吧,因为nump