标题:Python中的网络爬虫怎么用?
只看楼主
专注的蝴蝶
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2019-9-4
 问题点数:0 回复次数:1 
Python中的网络爬虫怎么用?
爬虫概述
(约2016年)网络爬虫个人使用和科研范畴基本不存在问题,但商业盈利范畴就要看对方了。
通过网站的Robots协议(爬虫协议)可以知道可以和不可以抓取的内容,其中User-Agent: 为允许的url,Allow:为允许的内容,Disallow: 为不允许。Disallow: /为禁止抓取允许以外的内容。 Disallow: /abc 表示禁止访问收录abc.php、abc.html和abc文件夹下的所有文件。 Disallow: /abc/ 表示仅禁止访问abc文件夹下的所有文件,但是不限制abc.php、abc.html文件。
爬取的时候要遵循Robots协议,约束网络爬虫程序速度;使用数据时必须遵守网站的知识产权。
爬虫流程
1、获取网站
2、解析网页(提取数据)
3、存储数据。
4、(1)获取网站——基础技术:request、urllib、selenium(模拟浏览器);进阶技术:多进程多线程抓取、登陆抓取、突破IP封禁、服务器抓取。
(2)解析网页——基础技术:re正则表达式、BeautiSoup、lxml,进阶技术:解决中文乱码。
(3)存储数据——基础技术:txt文件、csv文件;进阶技术:MySQl、MongoDB。
安装
安装Anaconda来一键安装python编码环境。利用pip(window进cmd,Mac进terminal)安装bs4、request、lxml等第三方库。
 pip install bs4
 pip install request
 pip install lxml
编译器Jupyter(其他还有Notepad++、SublimeTexture、Spyder),cmd下输入jupyter notebook浏览器启动Jupyter界面
*(自己弄的部分)Spyder安装pip install --pre -U spyder……好像有Anaconda最好不要用这个
Python基础
(1)严格的代码缩进,以Tab键或者4个空格进行缩进。
“#”后面是注释
*python没有限制关键字,方法和变量名也没有加以区分,编写的时候自己得注意取不同的名字。变量会根据赋值的内容自动决定类型。
输出语句
 print(“内容”)
4种 数据类型 :1)String字符串、2)Number数字、3)list列表、4)Dictionaries字典。
String字符串——‘和“都可以用来放字符串,可以使用+来连接。
string1 ='abc'
str = "fe"
print(string1+str)
Number数字——常用的有int(整数)和float(浮点数)两种。如果要转换,在变量前加int或float。注意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字典——可变容器模型,含有key和value(就是键值对啦)。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循环两种,同样是()变成末尾的:。不过python的for循环形式上更接近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, '是一个质数')
此外循环中可以用continue、break、pass(什么也不做)。
3. 函数——参数(()里的内容)必须要正确地写入函数中
def add(x):
    y = x + 1
    return y
w = 1
print(w)
print(add(w))
运算符,这里只提一下python中有**——幂 - 返回x的y次幂,//——取整除 - 返回商的整数部分(向下取整)并且没有++、–(- -,间隙被间隙掉了!)。另外与或非分别写成and、or、not。python还有成员运算符in、not in;身份运算符is,not is(用于比较两个对象的存储单元)

class Person:
    #这是一个类变量,它的值将在这个类的所有实例之间共享
    n = 0
    #__init__构造方法,注意前后均有两个_
    #sel外汇返佣http://www. 代表类的实例,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")
搜索更多相关主题的帖子: print Python 循环 for 方法 
2019-09-12 17:23
东海ECS
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:Python
等 级:版主
威 望:19
帖 子:376
专家分:1454
注 册:2023-1-24
得分:0 
网络爬虫是指按照一定规则自动化访问网站并采集网站中的信息,一般采用Python来实现。以下是一个简单的网络爬虫的Python代码:

程序代码:
import requests
from bs4 import BeautifulSoup

url = 'http://' # 网站的url
response = requests.get(url) # 访问网站获取其源代码
soup = BeautifulSoup(response.text, 'html.parser') # 使用BeautifulSoup解析html代码

# 获取网页中的超链接和文本
for link in soup.find_all('a'):
    print(link.get('href'), link.text)

在这个例子中,我们使用了requests库来访问网站,并使用BeautifulSoup库解析网页的HTML代码以便快速抓取目标信息。同时,我们还使用了for循环和find_all()方法来遍历网页中的所有链接,并获取它们的文本和超链接地址。

当然,如果你需要爬虫更多的数据或者实现更复杂的功能,这个简单的代码就不够了。对于这种情况,你需要熟悉更多的Python网络爬虫技巧,例如使用正则表达式或XPath查找特定的数据,或者使用Selenium进行模拟用户登录和交互操作。

会当凌绝顶,一览众山小.
2023-04-15 11:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-496803-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060966 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved