python爬虫入门教程(五分钟学会Python网络爬虫)
但不管怎样,爬虫技术是无罪的,还是值得我们开发人员去学习了解一下的。在学习之前,我们还是要先了解一下相关概念。
网络爬虫:又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
大数据时代,要进行数据分析,首先要有数据源,可数据源从哪里来,花钱买,没预算,只能从其它网站就行抓取。
细分下来,业内分为两类:爬虫和反爬虫。
反爬虫:顾名思义,就是防止你来我网站或APP上做爬虫的。
爬虫工程师和反爬虫工程师是一对相爱相杀的小伙伴,经常因为对方要加班写代码,甚至丢掉工作。比如下面这张图,大家用心感受一下:
如上图所示,爬虫的第一个步骤就是对所要爬取的网页进行请求,以获取其相应返回的结果,然后在使用一些方法,对响应内容解析,提取想要的内容资源,最后,将提取出来的资源保存起来。
工欲善其事必先利其器的道理相信大家都懂的,想要提升效率,一些常用的工具是必不可少的,以下就是个人推荐的几款工具: Chrome、Charles、Postman、Xpath-Helper
目前主流的Java、Node.js、C#、python等开发语言,都可以实现爬虫。
所以,在语言的选择上,你可以选择最擅长的语言来进行爬虫脚本的编写。
目前爬虫这块用的最多的是python,因为python语法简洁,方便修改,而且python里有多爬虫相关的库,拿过来就可以使用,网上的资料也比较多。
首先要使用python语言做爬虫,需要学习一下python的基础知识,还有HTML、CSS、JS、Ajax等相关的知识。 这里,列出python中一些与爬虫相关的库和框架:
1.1、urllib和urllib21.2、Requests1.3、BeautifulSoup1.4、Xpath语法与lxml库 1.5、PhantomJS1.6、Selenium1.7、PyQuery1.8、Scrapy...... 复制代码
因为时间有限,本文只介绍Selenium库的爬虫技术,像自动化测试,还有其它库和框架的资料,感兴趣的小伙伴可以自行学习。
2.1、Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。
2.2、安装方式
pipinstall Selenium 复制代码
2.3、Selenium定位元素的8种方式
本案例的需求是:抓取豆瓣电影Top250电影信息。
url:https://movie.douban.com/top250复制代码
开发工具采用PyCharm,数据库采用sqlServer2012。
数据库表脚本:
CREATETABLEMovies ( IdINTPRIMARY KEYIDENTITY(1,1), NameNVARCHAR(20) NOTNULLDEFAULT'', EName NVARCHAR(50) NOTNULLDEFAULT'', OtherName NVARCHAR(50) NOTNULLDEFAULT'', Info NVARCHAR(600) NOTNULLDEFAULT'', Score NVARCHAR(5) NOTNULLDEFAULT'0', NumberNVARCHAR(20) NOTNULLDEFAULT'0', Remark NVARCHAR(200) NOTNULLDEFAULT'', createUser INTNOTNULLDEFAULT0, createTime DATETIME DEFAULTGETDATE(), updateUser INTNOTNULLDEFAULT0, updateTime DATETIME DEFAULTGETDATE() ); 复制代码
爬虫的第一步,分析url,经过分析,豆瓣电影Top250页面的url有一定的规则:
每页显示25条电影信息,url规则如下,以此类推。
接着,再对网页源码进行分析:
最后,编写爬虫脚本:
importimportlib importrandom importsys importtime importpymssql fromselenium importwebdriver fromselenium.webdriver.common.by importBy # 反爬虫设置--伪造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") exceptpymssql.OperationalError asmsg: print("error: Could not Connection SQL Server!please check your dblink configure!") sys.exit() else: cur = conn.cursor() defmain():forn inrange(0, 10): count = n*25url = 'https://movie.douban.com/top250?start='+str(count) j = 1# if(n == 7):# j = 5fori inrange(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() 复制代码
成果展示:
原文地址:https://tangjiusheng.cn/it/4203.html