Python中的网络爬虫怎么用?

心不动则不痛 提交于 2019-11-29 10:13:14

爬虫概述

(约2016年)网络爬虫个人使用和科研范畴基本不存在问题,但商业盈利范畴就要看对方了。

通过网站的Robots协议(爬虫协议)可以知道可以和不可以抓取的内容,其中User-Agent: 为允许的urlAllow:为允许的内容,Disallow: 为不允许。Disallow: /为禁止抓取允许以外的内容。 Disallow: /abc 表示禁止访问收录abc.phpabc.htmlabc文件夹下的所有文件。 Disallow: /abc/ 表示仅禁止访问abc文件夹下的所有文件,但是不限制abc.phpabc.html文件。

爬取的时候要遵循Robots协议,约束网络爬虫程序速度;使用数据时必须遵守网站的知识产权。

爬虫流程

1、获取网站

2、解析网页(提取数据)

3、存储数据。

4、(1)获取网站——基础技术:requesturllibselenium(模拟浏览器);进阶技术:多进程多线程抓取、登陆抓取、突破IP封禁、服务器抓取。

(2)解析网页——基础技术:re正则表达式、BeautiSouplxml,进阶技术:解决中文乱码。

(3)存储数据——基础技术:txt文件、csv文件;进阶技术:MySQlMongoDB

安装

安装Anaconda来一键安装python编码环境。利用pip(windowcmdMacterminal)安装bs4requestlxml等第三方库。

 pip install bs4

 pip install request

 pip install lxml

编译器Jupyter(其他还有Notepad++SublimeTextureSpyder),cmd下输入jupyter notebook浏览器启动Jupyter界面

*(自己弄的部分)Spyder安装pip install --pre -U spyder……好像有Anaconda最好不要用这个

Python基础

1)严格的代码缩进,以Tab键或者4个空格进行缩进。

#”后面是注释

*python没有限制关键字,方法和变量名也没有加以区分,编写的时候自己得注意取不同的名字。变量会根据赋值的内容自动决定类型。

输出语句

 print(“内容”)

4种 数据类型 :1String字符串、2Number数字、3list列表、4Dictionaries字典。

String字符串——‘和“都可以用来放字符串,可以使用+来连接。

string1 ='abc'

str = "fe"

print(string1+str)

Number数字——常用的有int(整数)和float(浮点数)两种。如果要转换,在变量前加intfloat。注意Number不能直接和string相加

thisSeven = 7

float1 = 1.1

chase = int(float1)

print(thisSeven+chase)

另外,Number还有长整数和复数。

5. list列表——列表可以包括任意种类数据类型!此外可以通过[起始下标:结束下标]其他的倒和一般的数组没什么区别。

*[]赋值,查询也是[]

list1 = ['a', 2, "new", 1.9]

print(list1[1:3])

list1[3] = float(list1[1])

print(list1)

6.Dictionaries字典——可变容器模型,含有keyvalue(就是键值对啦)。key必须唯一,value可用任意种类数据类型。

*{}赋值,但用[]查询

notebook = {"name": '1234', "age":7, "class":"first"}

print(notebook["name"])

print(notebook)

#循环遍历notebook的键和值

for key1, value1 in notebook.items():

   print(key1, value1)

Python基础(1++

python的列表还有一种只读格式——元组Tuple,它用()进行赋值,且只能在初始化时赋值。

列表有追加元素的内置方法append()

字典有内置方法keys()(获得所有键的值),values()

元组用( )” 标识, 列表用 “[ ]” 标识,字典用 “{ }” 标识

type(变量) 查看该变量的数据类型,还可以用 isinstance(变量,类型) 来判断是不是那种类型。type()不会认为子类是一种父类类型,isinstance()会认为子类是一种父类类型。

Python基础(2

条件语句——格式上是if 条件 :,取代Java中()的是一个在最后的:同样有else存在(但是else后面要加:),另外还有else if简写而成的elif

a = 'book'

b = 'java'

c = "book"

if a == b :

    print(a)

else :

    print('a!=b')

if a == c :

    print(a)

elif b == c :

    print('b==c')

else :

    print('c!=a/b')

循环语句——常用的有for循环和while循环两种,同样是()变成末尾的:。不过pythonfor循环形式上更接近foreach循环,python中的循环还可以使用else

myBook = ['java', 'python', 'c']

for book in myBook:

    print(book)

print('\n')

for i,j in enumerate(('a','b','c')):

    print (i,j)

for i,j in enumerate(myBook):

    print (i,j)

count = 0

while count < 3:

    print(myBook[count])

    count = count + 1

for循环中利用内置函数 len() range(),函数 len() 返回列表的长度,即元素的个数, range返回一个序列的数。(例子来自菜鸟)(菜鸟你的括号呢?)

fruits = ['banana', 'apple',  'mango']

for index in range(len(fruits)):

   print ('当前水果 :', fruits[index])

else使用例子(例子来自菜鸟)

for num in range(10,20):  # 迭代 10 20 之间的数字

   for i in range(2,num): # 根据因子迭代

      if num%i == 0:      # 确定第一个因子

         j=num/i          # 计算第二个因子

         print ('%d 等于 %d * %d' % (num,i,j))

         break            # 跳出当前循环

   else:                  # 循环的 else 部分,break跳出循环的话就会执行

      print (num, '是一个质数')

此外循环中可以用continuebreakpass(什么也不做)。

3. 函数——参数(()里的内容)必须要正确地写入函数中

def add(x):

    y = x + 1

    return y

w = 1

print(w)

print(add(w))

运算符,外汇返佣http://www.fx61.com/,这里只提一下python中有**——幂 - 返回xy次幂,//——取整除 - 返回商的整数部分(向下取整)并且没有++、–(- -,间隙被间隙掉了!)。另外与或非分别写成andornotpython还有成员运算符innot in;身份运算符isnot is(用于比较两个对象的存储单元)

class Person:

    #这是一个类变量,它的值将在这个类的所有实例之间共享

    n = 0

    #__init__构造方法,注意前后均有两个_

    #self 代表类的实例,self 在定义类的方法时是必须有的

    #,虽然在调用时不必传入相应的参数。

    def __init__(self, name, age):

        self.name = name

        self.age = age

    def detail(self): #通过这个函数来调用被封装的内容

        print(self.name)

        print(self.age)   

obj1 = Person('sss', 16)#对象声明

obj1.detail()

obj1.name

obj1.n

继承格式

class 子类名(父类名):

构造方法重写时用super关键字来使用父类构造方法

class Father(object):

    def __init__(self, name):

class Son(Father):

    def __init__(self, name):

    super(Son, self).__init__(name)

基础重载方法

下表列出了一些通用的功能,可以在自己的类重写:

__init__ ( self [,args...] )

构造函数

简单的调用方法: obj = className(args)

__del__( self )

析构方法, 删除一个对象

简单的调用方法 : del obj

__repr__( self )

转化为供解释器读取的形式

简单的调用方法 : repr(obj)

__str__( self )

用于将值转化为适于人阅读的形式

简单的调用方法 : str(obj)

__cmp__ ( self, x )

对象比较

简单的调用方法 : cmp(obj, x)

模块Module——是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。使用 import 语句来引入模块。

# 导入模块

import support

# 现在可以调用模块里包含的函数了

support.print_func("Runoob")

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!