思科DevNet

Python网络爬虫(由简入深)

2018-12-14  本文已影响11人  dvlproad

本文章包含内容

一、Python必备基础认识
二、Python编写的初步尝试(用Sublime Text编写)
三、网络爬虫-使用Python和urllib、Beautiful Soup库抓取网页数据,并输出想要的内容至plist文件中
四、结束语

【附1:解决Sublime Text对Python的支持】
【附2:使用python的pip安装开发包/库(示例添加Beautiful Soup库)】
【附3:使用Beautiful Soup库来标准输出网页内容】
【附4:正则表达式必备基础知识】
【附5:Sublime Text的控制台输入】

一、Python必备基础认识

  • 进入:
    进入系统Python2:直接输入python即可;
    进入自装Python3:直接输入python3即可;
  • 退出:
    方法①:输入exit(),回车
    方法②:输入quit(),回车
    方法③:输入ctrl+z,回车

二、Python编写的初步尝试(用Sublime Text编写)

python2.x python3.x
打印 print "Hello world" print ("Hello world")
引入模块 import urllib2 import urllib.request
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import importlib,sys
importlib.reload(sys)
输入 raw_input input

设A为模块名,B为模块A中的某个类、方法或者变量等

import A from A import B
含义 导入整个模块A 导入A中的B
调用A中的B A.B B
测试Sublime Text对Python编写的支持.png

另有【附1:解决Sublime Text对Python的支持】

分割图1.jpg

三、网络爬虫-使用Python和urllib、Beautiful Soup库抓取网页数据,并输出想要的内容至plist文件中

本节包含内容如下:

1、抓取数据的必备知识(获取及打印网页内容)
2、使用BeautifulSoup库的必备知识
3、使用Beautiful Soup库抓取网页数据,并输入想要的内容至plist文件中示例

1、抓取数据的必备知识(获取及打印网页内容)

以要抓取某个网站上的东西为例,

#-*- coding:utf-8 -*-
import urllib.request
resp=urllib.request.urlopen('http://www.baidu.com')
html=resp.read()
print(html)

一般为了能够让输出内容更加刻度,我们都会按照【附3:使用Beautiful Soup库来标准输出网页内容】进行操作。
要使用Beautiful Soup库,请参照【附2:使用python的pip安装开发包/库(示例添加Beautiful Soup库)】进行安装。

2、使用BeautifulSoup库的必备知识

3、使用Beautiful Soup库抓取网页数据,并输出想要的内容至plist文件中示例

#-*- coding:utf-8 -*-
import urllib.request
from bs4 import BeautifulSoup

import importlib,sys 
importlib.reload(sys)

# 函数
def  printPlistCode():
    #1.得到这个网页的 html 代码 #
    html = urllib.request.urlopen("http://movie.douban.com/chart").read()

    #2.转换 一种格式,方便查找
    #soup = BeautifulSoup(html, 'html.parser')
    soup = BeautifulSoup(html,'lxml')
    print(soup.prettify())
    print(soup.title)
    print(soup.title.name)
    print(soup.title.string)
    print(soup.title.parent.name)
    print(soup.p)
    print(soup.p["class"])
    print(soup.a)
    print(soup.find_all('a'))
    print(soup.find(id='link3'))
    print("\n")
    print("\n")
    print("\n")

    #3.  得到 找到的所有 包含 a 属性是class = nbg 的代码块,数组
    liResutl = soup.findAll('a', attrs = {"class" : "nbg"})
    #4.用于拼接每个字典的字符串
    tmpDictM = ''

    #5. 遍历这个代码块  数组
    for li in liResutl:

        #5.1 找到 img 标签的代码块 数组
        imageEntityArray = li.findAll('img')

        #5.2 得到每个image 标签
        for image in imageEntityArray:
            #5.3 得到src 这个属性的 value  后面也一样 类似 key value
            link = image.get('src')
            imageName = image.get('alt')
            #拼接 由于 py中 {} 是一种数据处理格式,类似占位符
            tmpDict = '''@{0}@\"name\" : @\"{1}\", @\"imageUrl\" : @\"{2}\"{3},'''

            tmpDict =  tmpDict.format('{',imageName,link,'}')

            tmpDictM = tmpDictM + tmpDict

    #6.去掉最后一个 , 
    tmpDictM = tmpDictM[0:len(tmpDictM) - 1] #为了能输出原生中文不要进行.encode('utf8')


    #7 拼接全部
    restultStr = '@[{0}];'.format(tmpDictM)

    print(restultStr)


if __name__ == '__main__':
    printPlistCode()

输出结果为


抓取到的内容.png

下面将其拷贝出来至Xcode,并写入plist文件中

将抓取的内容写入plist文件的代码.png

查看输出到该路径下的文件内容,如图所示:


整理到plist文件中的内容.png

至此,恭喜您已经完成抓取网页数据,并输入想要的内容至plist文件中。


分割图1.jpg

四、初探Python的requests模块

import requests
response=requests.get('https://api.github.com/events')
print(response.text)

其他各种请求方式:常用的就是requests.get()和requests.post()
import requests
response1 = requests.get('https://api.github.com/events')
response2 = requests.post('http://httpbin.org/post', data = {'key':'value'})
response3 = requests.put('http://httpbin.org/put', data = {'key':'value'})
response4 = requests.delete('http://httpbin.org/delete')
response5 = requests.head('http://httpbin.org/get')
response6 = requests.options('http://httpbin.org/get')

五、结束语

感谢您的细心查阅,如有不足,还请指教。

【附1:解决Sublime Text对Python的支持】
【附2:使用python的pip安装开发包/库(示例添加Beautiful Soup库)】
【附3:使用Beautiful Soup库来标准输出网页内容】
【附4:正则表达式必备基础知识】
【附5:Sublime Text的控制台输入】

【附1:解决Sublime Text对Python的支持】

Sublime的.sublime-build文件的位置:~/Library/Application Support/Sublime Text 3/Packages/User

解决Sublime Text对Python的支持.png

【附2:使用python的pip安装开发包/库(示例添加Beautiful Soup库)】

Mac上装python的pip安装包时,显示-bash: pip: command not found的解决办法

命令①、curl 'https://bootstrap.pypa.io/get-pip.py' > get-pip.py
命令②、sudo python get-pip.py
使用python的pip安装Beautiful Soup库.png

【附3:使用Beautiful Soup库来标准输出网页内容】

执行如下代码即可

import urllib.request
from bs4 import BeautifulSoup

html = urllib.request.urlopen("http://movie.douban.com/chart").read()

soup = BeautifulSoup(html,'lxml')
print(soup.prettify())
print(soup.title)
print(soup.title.name)
print(soup.title.string)
print(soup.title.parent.name)
print(soup.p)
print(soup.p["class"])
print(soup.a)
print(soup.find_all('a'))
print(soup.find(id='link3'))

【附4:正则表达式必备基础知识】

常用正则表达式语法

特殊字符 描述
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
? 匹配前面的子表达式零次或一次。(必须跟在*或者+后边用)
. 匹配除换行符 \n 之外的任何单字符

因为.相当于除换行符 \n 之外的任何单字符

以ab为例 以aabaabab为例
.* 尽可能多,哪怕匹配结果是零次除换行符 \n 之外的任何单字符的也算匹配成功。
.+ 尽可能多,只要匹配结果是没达到至少一次除换行符 \n 之外的任何单字符,就算没匹配成功
a.*b 它将匹配最长的以a开始,以b结束的字符串。 它将会匹配到整个字符串ab 它将会匹配到整个字符串aabab
a.+b 它将匹配最长的以a开始,以b结束,且开头和结束之间是不能没有其他字符的字符串。 它将没有匹配 它将会匹配到整个字符串aabab
以ab为例 以aabaabab为例,会匹配到
.*? 尽可能少,哪怕匹配结果是零次除换行符 \n 之外的任何单字符的也算匹配成功 我是来占位的。我是来占位的,我是来占位的。我是来占位的,我是来占位的
.+? 尽可能少,只要匹配结果是没达到至少一次除换行符 \n 之外的任何单字符,就算没匹配成功。
a.*?b 它将匹配最短的以a开始,以b结束的字符串 它将会匹配到整个字符串ab aab(第一到第三个字符)
aab(第四到第六个字符)
ab(第七到第八个字符)
a.+?b 它将匹配最短的以a开始,以b结束,且开头和结束之间是不能没有其他字符的字符串。 它将没有匹配 aab(第一到第三个字符)
aab(第四到第六个字符)

实际可能举例及注意:

以"orderId":"aabaabab"为例 注意
".*?" "orderId"
"aabaabab"
"(.*?)" "orderId"
"aabaabab"
()是标记一个子表达式的开始和结束位置
"orderId":".*?" "orderId":"aabaabab"
"orderId":"(.*?)" "orderId":"aabaabab" ()是标记一个子表达式的开始和结束位置。
"orderId":"\(.*?\)" 没有匹配 \(相当于检测括号

附:如果你想验证你的正则表达式是否正确的话,可以在在线正则表达式测试上验证。

举例:

正则表达式
a.b 可以匹配这些字符串:acb、aeb、a b,但是不匹配aoob。
a.*?xxx 可以匹配 abxxx axxxxx abbbbbxxx

【附5:Sublime Text的控制台输入】

编译运行的时候为tools->build,即我们常用的快捷键Ctrl+B。这之后底下会出现控制台。但是这个在控制台中只能输出不能输入。
想要在Sublime Text的"控制台"实现输入,如有时候我们需要输入密码,则我们需要安装SublimeREPL插件。
安装SublimeREPL步骤:Ctrl+shift+p 键入 install packages,再继续键入 SublimeREPL 安装即可。
安装SublimeREPL完后,以后的编译运行的操作当你改为:tools->sublimeREPL->python->python-Run current file的时候,其就会出现新的页面REPL[python],作为新的控制台,可以输入输出互动。
如还不清楚,可查看sublime运行python程序的控制台输入

上一篇下一篇

猜你喜欢

热点阅读