快速带你学会Python网络爬虫
优采云 发布时间: 2022-05-25 17:49快速带你学会Python网络爬虫
但不管怎样,爬虫技术是无罪的,还是值得我们开发人员去学习了解一下的。在学习之前,我们还是要先了解一下相关概念。
什么是爬虫
网络爬虫:又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
大数据时代,要进行数据分析,首先要有数据源,可数据源从哪里来,花钱买,没预算,只能从其它网站就行抓取。
细分下来,业内分为两类:爬虫和反爬虫。
反爬虫:顾名思义,就是防止你来我网站或APP上做爬虫的。
爬虫工程师和反爬虫工程师是一对相爱相杀的小伙伴,经常因为对方要加班写代码,甚至丢掉工作。比如下面这张图,大家用心感受一下:
爬虫的基本原理
如上图所示,爬虫的第一个步骤就是对所要爬取的网页进行请求,以获取其相应返回的结果,然后在使用一些方法,对响应内容解析,提取想要的内容资源,最后,将提取出来的资源保存起来。
爬虫工具和语言选择
一、爬虫工具
工欲善其事必先利其器的道理相信大家都懂的,想要提升效率,一些常用的工具是必不可少的,以下就是个人推荐的几款工具:Chrome、Charles、Postman、Xpath-Helper
二、爬虫语言
目前主流的Java、Node.js、C#、python等开发语言,都可以实现爬虫。
所以,在语言的选择上,你可以选择最擅长的语言来进行爬虫脚本的编写。
目前爬虫这块用的最多的是python,因为python语法简洁,方便修改,而且python里有多爬虫相关的库,拿过来就可以使用,网上的资料也比较多。
Python爬虫Selenium库的使用
一、基础知识
首先要使用python语言做爬虫,需要学习一下python的基础知识,还有HTML、CSS、JS、Ajax等相关的知识。这里,列出python中一些与爬虫相关的库和框架:
1.1、urllib和urllib2<br />1.2、Requests<br />1.3、Beautiful Soup<br />1.4、Xpath语法与lxml库<br />1.5、PhantomJS<br />1.6、Selenium<br />1.7、PyQuery<br />1.8、Scrapy<br />......<br />复制代码<br />
因为时间有限,本文只介绍Selenium库的爬虫技术,像自动化测试,还有其它库和框架的资料,感兴趣的小伙伴可以自行学习。
二、Selenium基础
2.1、Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。
2.2、安装方式
pip install Selenium<br />复制代码<br />
2.3、Selenium定位元素的8种方式
爬虫实例演示
本案例的需求是:抓取豆瓣电影Top250电影信息。
url:https://movie.douban.com/top250<br />复制代码<br />
开发工具采用PyCharm,数据库采用sqlServer2012。数据库表脚本:
CREATE TABLE Movies<br />(<br /> Id INT PRIMARY KEY IDENTITY(1,1),<br /> Name NVARCHAR(20) NOT NULL DEFAULT '',<br /> EName NVARCHAR(50) NOT NULL DEFAULT '',<br /> OtherName NVARCHAR(50) NOT NULL DEFAULT '',<br /> Info NVARCHAR(600) NOT NULL DEFAULT '',<br /> Score NVARCHAR(5) NOT NULL DEFAULT '0',<br /> Number NVARCHAR(20) NOT NULL DEFAULT '0',<br /> Remark NVARCHAR(200) NOT NULL DEFAULT '',<br /> createUser INT NOT NULL DEFAULT 0, <br /> createTime DATETIME DEFAULT GETDATE(),<br /> updateUser INT NOT NULL DEFAULT 0, <br /> updateTime DATETIME DEFAULT GETDATE()<br />);<br />
复制代码
爬虫的第一步,分析url,经过分析,豆瓣电影Top250页面的url有一定的规则:
每页显示25条电影信息,url规则如下,以此类推。
接着,再对网页源码进行分析:
最后,编写爬虫脚本:
import importlib<br />import random<br />import sys<br />import time<br />import pymssql<br />from selenium import webdriver<br />from selenium.webdriver.common.by import By<br /><br /># 反爬虫设置--伪造IP和请求<br />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',<br /> '180.118.135.26', '121.232.199.197', '121.232.145.101', '121.31.139.221', '115.223.224.114']<br />headers = {<br /> "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",<br /> 'X-Requested-With': 'XMLHttpRequest',<br /> 'X-Forwarded-For': ip[random.randint(0, 10)],<br /> 'Host': ip[random.randint(0, 10)]<br />}<br /><br />importlib.reload(sys)<br /><br />try:<br /> conn = pymssql.connect(host="127.0.0.1", user="sa", password="123", database="MySchool",charset="utf8")<br />except pymssql.OperationalError as msg:<br /> print("error: Could not Connection SQL Server!please check your dblink configure!")<br /> sys.exit()<br />else:<br /> cur = conn.cursor()<br /><br />def main():<br /> for n in range(0, 10):<br /> count = n*25<br /> url = 'https://movie.douban.com/top250?start='+str(count)<br /> j = 1<br /> # if(n == 7):<br /> # j = 5<br /> for i in range(j, 26):<br /> driver = webdriver.PhantomJS(desired_capabilities=headers) # 封装浏览器信息<br /> driver.set_page_load_timeout(15)<br /> driver.get(url) # 加载网页<br /> # data = driver.page_source # 获取网页文本<br /> # driver.save_screenshot('1.png') # 截图保存<br /><br /> name = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[0].text.replace('\'', '')<br /> ename = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[1].text.replace("/", "").replace(" ", "").replace('\'', '')<br /> try:<br /> otherName = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[2].text.lstrip(' / ').replace("/", "|").replace(" ", "").replace('\'', '')<br /> except:<br /> otherName = ''<br /> info = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/p")[0].text.replace("/", "|").replace(" ", "").replace('\'', '')<br /> score = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/div/span[2]")[0].text.replace('\'', '')<br /> number = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/div/span[4]")[0].text.replace("人评价", "").replace('\'', '')<br /> remark = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/p/span")[0].text.replace('\'', '')<br /><br /> sql = "insert into Movies(Name,EName,OtherName,Info,Score,Number,Remark) values('"+name + \<br /> "','"+ename+"','"+otherName+"','"+info + \<br /> "','"+score+"','"+number+"','"+remark+"') "<br /> try:<br /> cur.execute(sql)<br /> conn.commit()<br /> print("第"+str(n)+"页,第"+str(i)+"条电影信息新增成功")<br /> time.sleep(30)<br /> except:<br /> conn.rollback()<br /> print("新增失败:"+sql)<br /> driver.quit()<br /><br />if __name__ == '__main__':<br /> main()<br />
复制代码成果展示:
<strong style="outline: 0px;font-size: 16px;letter-spacing: 0.544px;word-spacing: 1.6px;text-align: center;white-space: pre-wrap;"><strong style="outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.544px;white-space: normal;word-spacing: 1.6px;caret-color: rgb(62, 62, 62);">●</strong>视频教程:0基础快速入门到精通</strong><strong style="outline: 0px;white-space: pre-wrap;letter-spacing: 0.544px;word-spacing: 1.6px;">●基础:</strong>20天学会Python基础●爬虫:20天学会Python爬虫<strong style="outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;white-space: normal;word-spacing: 1.6px;caret-color: rgb(62, 62, 62);">●数据分析:</strong>20天学会Python数据分析<strong style="outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.544px;white-space: normal;word-spacing: 1.6px;caret-color: rgb(62, 62, 62);">●</strong>办公自动化:20天学会Python办公自动化<strong style="outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.544px;white-space: normal;word-spacing: 1.6px;caret-color: rgb(62, 62, 62);">●</strong>实战案例:100个Python实战案例●趣味干货:用Python分析股市,练练手Python实*敏*感*词*币20行Python代码,无损压缩千百张图片!<br style="outline: 0px;" />进来看冰冰!用Python写了一个青年大学习提醒系统<br style="outline: 0px;" />Python制作进度条,原来有这么多方法
-END-Python 专栏关于 Python 都在这里