Python爬虫从入门到入狱?看了这篇文章或许会改变你的看法

390 篇文章 2 订阅
182 篇文章 2 订阅

偶尔有大数据公司被端,无良流量自媒体为博眼球,夸大事实,一句爬虫玩得好,牢饭吃得早,把想学爬虫萌新吓得瑟瑟发抖,生怕因为自己写的爬虫被拷进去,嘤嘤嘤,害怕,我:说实话,以大部分萌新的技术能力有些实在想太多,这种妄下定论的方式跟吃完虾再吃维生素C会砒霜中毒理论一样,脱离剂量谈毒性——都是耍流氓。

从技术中立角度而言,爬虫技术本身并无违法违规之处,爬什么,怎么爬才是导致锒铛入狱的罪魁祸首。Github上有个库记录了国内爬虫开发者涉诉与违规相关的新闻、资料与法律法规:

https://github.com/

节省读者时间,直接归纳下:

1、无视robots协议,爬不给爬的数据

robots.txt,纯文本文件,网站管理者可在此文件中声明不想被搜索引擎访问的部分,或指定搜索引擎只收录的指定内容,语法简单:

通配符() → 匹配0个或多个任意字符;
匹配符($) → 匹配URL结尾的字符;
User-agent → 搜索引擎爬虫的名字,各大搜索引擎都有固定的名字,如百度Baisuspider,如果该项为
(通配符) 表示协议对任何搜索引擎爬虫均有效;
Disallow → 禁止访问的路径;
Allow → 允许访问的路径;

不过这个协议可以说是君子协议,防君子不防小人,无视Robots协议随意抓取网站内容,将涉嫌构成对《反不正当竞争法》的第二条的违反,即违反诚实信用原则和商业道德的不正当竞争行为。

2、 强行突破网站设置的技术措施

网站一般都会做下反爬,以减少爬虫批量访问对网站带来的巨大压力和负担。爬虫开发者通过技术手段绕过反爬,客观影响了网站的正常运行(甚至搞挂了),适用《反不正当竞争法》第十二条(四) 其他妨碍、破坏其他经营者合法提供的网络产品或者服务正常运行的行为。

而强行突破某些特定被爬放的技术措施,还可能构成刑事犯罪行为。

这里还要警惕一点:为违法违规组织提供爬虫相关服务,间接的也可能要负刑事责任,案例里的极验破解者被抓就是模板,尽管技术本身无罪,但是你开发出来了,被犯罪分子利用了,一样有责任。

3、爬取特定类型的信息

1)用户的个人隐私

2)用户的个人信息

3)著作权法保护的产品

4)商业秘密

5)反不正当竞争保护的数据

担心自己写的爬虫违法,可以对号入座看一看,总结下爬的基本操守:

先确定爬啥网站:国家事务,国防建设、尖端科学技术领域的不要碰;
确定什么内容:个人隐私、个人信息、商业秘密不要碰;著作权法保护、不正当竞争保护的数据,自己偷着乐,不传播和用作盈利还好 (如数据分析参考下~)。
爬取手段:温柔点,尽量别影响正常用户的使用,细水长流,把别人网站搞挂了,不搞你才怪。
robots协议:em…我是小人

天网恢恢,疏而不漏~

相信讲了爬虫违法范畴的解读能打消一部分想学Python爬虫的小白萌新心中的顾虑。

爬虫学习

爬虫学习先得有一套完整的学习路线和系统的学习教程,我都整理好了,放在下方卡片,点击跳转进群就可以领取!

相信点进来看的小伙伴都对爬虫非常感兴趣,我也是一样的。我刚开始接触爬虫的时候,就被深深吸引了,因为感觉SO COOL啊!每当敲完代码后看着一串串数据在屏幕上浮动,感觉很有成就感,有木有?更厉害的是,爬虫的技术可以应用到很多生活场景中,例如,自动投票啊,批量下载感兴趣的文章、小说、视频啊,微信机器人啊,爬取重要的数据进行数据分析啊,切实的感觉到这些代码是给自己写的,能为自己服务,也能为他人服务,所以人生苦短,我选爬虫。

1、学习爬虫,先要了解爬虫是什么?

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

其实,说白了就是爬虫可以模拟浏览器的行为做你想做的事,订制化自己搜索和下载的内容,并实现自动化的操作。比如浏览器可以下载小说,但是有时候并不能批量下载,那么爬虫的功能就有用武之地了。

2、爬虫学习路线

学习Python爬虫的大致步骤如下:

1).首先学会基本的Python语法知识
2).学习Python爬虫常用到的几个重要内置库urllib, http等,用于下载网页
3).学习正则表达式re、BeautifulSoup(bs4)、Xpath(lxml)等网页解析工具
4).开始一些简单的网站爬取(博主从百度开始的,哈哈),了解爬取数据过程
5).了解爬虫的一些反爬机制,header,robot,时间间隔,代理ip,隐含字段等
6).学习一些特殊网站的爬取,解决登录、Cookie、动态网页等问题
7).了解爬虫与数据库的结合,如何将爬取数据进行储存
8).学习应用Python的多线程、多进程进行爬取,提高爬虫效率
9).学习爬虫的框架,Scrapy、PySpider等
10).学习分布式爬虫(数据量庞大的需求)

3、Python 爬虫Selenium库的使用

1)基础知识

首先要使用python语言做爬虫,需要学习一下python的基础知识,还有HTML、CSS、JS、Ajax等相关的知识。 这里,列出python中一些与爬虫相关的库和框架:

1.1、urllib和urllib2
1.2、Requests
1.3、Beautiful Soup
1.4、Xpath语法与lxml库
1.5、PhantomJS
1.6、Selenium
1.7、PyQuery
1.8、Scrapy
......

因为时间有限,本文只介绍Selenium库的爬虫技术,像自动化测试,还有其它库和框架的资料,感兴趣的小伙伴可以自行学习。

2)Selenium基础

2.1、Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。

2.2、安装方式

pip install Selenium

2.3、Selenium定位元素的8种方式
在这里插入图片描述

爬虫实例演示

本案例的需求是:抓取豆瓣电影Top250电影信息。

url:https://movie.douban.com/top250

在这里插入图片描述

开发工具采用PyCharm,数据库采用sqlServer2012。

数据库表脚本:

CREATE TABLE Movies
(
	Id INT PRIMARY KEY IDENTITY(1,1),
	Name NVARCHAR(20) NOT NULL DEFAULT '',
	EName NVARCHAR(50) NOT NULL DEFAULT '',
	OtherName NVARCHAR(50) NOT NULL DEFAULT '',
	Info NVARCHAR(600) NOT NULL DEFAULT '',
	Score NVARCHAR(5) NOT NULL DEFAULT '0',
	Number NVARCHAR(20) NOT NULL DEFAULT '0',
	Remark NVARCHAR(200) NOT NULL DEFAULT '',
	createUser INT NOT NULL DEFAULT 0,	
	createTime DATETIME DEFAULT GETDATE(),
	updateUser INT NOT NULL DEFAULT 0,	
	updateTime DATETIME DEFAULT GETDATE()
);

爬虫的第一步,分析url,经过分析,豆瓣电影Top250页面的url有一定的规则:

每页显示25条电影信息,url规则如下,以此类推。
在这里插入图片描述
接着,再对网页源码进行分析:
在这里插入图片描述
最后,编写爬虫脚本:

import importlib
import random
import sys
import time
import pymssql
from selenium import webdriver
from selenium.webdriver.common.by import By

# 反爬虫设置--伪造IP和请求
ip = ['111.155.116.210', '115.223.217.216', '121.232.146.39', '221.229.18.230', '115.223.220.59', '115.223.244.146',
      '180.118.135.26', '121.232.199.197', '121.232.145.101', '121.31.139.221', '115.223.224.114']
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
    'X-Requested-With': 'XMLHttpRequest',
    'X-Forwarded-For': ip[random.randint(0, 10)],
    'Host': ip[random.randint(0, 10)]
}

importlib.reload(sys)

try:
    conn = pymssql.connect(host="127.0.0.1", user="sa", password="123", database="MySchool",charset="utf8")
except pymssql.OperationalError as msg:
    print("error: Could not Connection SQL Server!please check your dblink configure!")
    sys.exit()
else:
    cur = conn.cursor()

def main():
    for n in range(0, 10):
        count = n*25
        url = 'https://movie.douban.com/top250?start='+str(count)
        j = 1
        # if(n == 7):
        #     j = 5
        for i in range(j, 26):
            driver = webdriver.PhantomJS(desired_capabilities=headers)  # 封装浏览器信息
            driver.set_page_load_timeout(15)
            driver.get(url)  # 加载网页
            # data = driver.page_source  # 获取网页文本
            # driver.save_screenshot('1.png')  # 截图保存

            name = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[0].text.replace('\'', '')
            ename = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[1].text.replace("/", "").replace(" ", "").replace('\'', '')
            try:
                otherName = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[2].text.lstrip(' / ').replace("/", "|").replace(" ", "").replace('\'', '')
            except:
                otherName = ''
            info = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/p")[0].text.replace("/", "|").replace(" ", "").replace('\'', '')
            score = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/div/span[2]")[0].text.replace('\'', '')
            number = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/div/span[4]")[0].text.replace("人评价", "").replace('\'', '')
            remark = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/p/span")[0].text.replace('\'', '')

            sql = "insert into Movies(Name,EName,OtherName,Info,Score,Number,Remark) values('"+name + \
                "','"+ename+"','"+otherName+"','"+info + \
                "','"+score+"','"+number+"','"+remark+"') "
            try:
                cur.execute(sql)
                conn.commit()
                print("第"+str(n)+"页,第"+str(i)+"条电影信息新增成功")
                time.sleep(30)
            except:
                conn.rollback()
                print("新增失败:"+sql)
            driver.quit()

if __name__ == '__main__':
    main()

成果展示:
在这里插入图片描述

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

朋友们如果需要这份完整的资料可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

一、Python学习大纲

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

三、入门学习视频

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。在这里插入图片描述

五、python副业兼职与全职路线

在这里插入图片描述

在这里插入图片描述

👉[[CSDN大礼包:《python兼职资源&全套学习资料》免费分享]]安全链接,放心点击

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值