Python爬虫超详解,零基础入门,老人都能看懂网络机器人)是一个模拟浏览器发送网络请求并接收请求响应的程序。它是一种按照一定规则自动抓取互联网信息的程序。原则上只要浏览器(客户端)能做的,爬虫都能做。我们为什么要使用爬虫?互联网大数据时代,互联网给我们生活带来的便利和海量数据的爆炸式增长。过去,我们使用书籍、报纸、电视、广播或信息。信息量有限,经过一定程度的筛选。信息比较有效,缺点是信息太窄。不对称的信息传递,让我们的视野受到限制,无法了解到更多的信息和知识。互联网大数据时代,我们一下子可以免费获取信息,我们得到的信息量巨大,但绝大部分都是无效的垃圾信息。例如,新浪微博每天产生几亿条状态更新,而在百度搜索引擎中,随便搜索一条——减肥一亿条消息。在如此海量的信息碎片中,我们如何获取对我们有用的信息呢?答案是筛选!通过一定的技术收集相关内容,经过分析和删除,才能得到我们真正需要的信息。这种信息收集、分析和整合的工作可以应用于广泛的领域。无论是生活服务、旅游出行、金融投资、各制造行业的产品市场需求等,都可以通过该技术获得更准确有效的信息。利用它。网络爬虫技术虽然名字陌生,但第一反应是那种柔软蠕动的生物,却是可以在虚拟世界中前行的利器。爬虫准备我们通常会说Python爬虫。其实这里可能存在误区。蜘蛛并不是Python独有的。爬虫可以使用的语言有很多,例如:PHP、JAVA、C#、C++、Python。选择Python作为爬虫是因为Python比较简单,功能也比较齐全。首先,我们需要下载python。我下载的是最新的官方3.8.3版本。其次,我们需要一个运行Python的环境。我用的是pychram,官网也可以下载。我们还需要一些库来支持爬虫的运行(一些Python可能自带的库)差不多就是这些库了,后面写了注释(爬虫运行的时候不一定只需要上面这些)libraries,看你爬虫的具体写法,反正如果你需要库,我们直接在setting里安装即可)我做的爬虫项目讲解是爬取豆瓣评分电影Top250的爬虫代码。我们要爬取的是这个网站:https://movie.douban.com/top250我在这里爬取已经完成,给大家看一下效果图。我把爬取的内容保存在xls中。我们抓取的内容是:电影详情链接、图片链接、电影中文名、电影外文名、评分、评价数、概况、相关信息。代码分析先把代码放出来,接下来我会根据代码一步步分析#-*-coding=utf-8-*-frombs4importBeautifulSoup#网页分析,获取数据importre#正则表达式,文本匹配`importurllib。请求,urllib。error#制定URL,获取网页数据importxlwt#执行excel操作#importsqlite3#执行SQLite数据库操作findLink=re.compile(r'
(\s+)?',"",bd)bd=re.sub('/',"",bd)data.append(bd.strip())datalist.append(data)returndatalist#获取指定URL的网页ContentdefaskURL(url):head={#模拟浏览器头部信息,向豆瓣服务器发送消息"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.122Safari/537.36"}#Useragent,意思是告诉豆瓣服务器我们是什么型号的机器和浏览器(本质上是告诉浏览器我们可以接收到什么级别的文件内容)request=urllib.request.Request(url,headers=head)html=""try:response=urllib.request.urlopen(request)html=response.read().decode("utf-8")excepturllib.error.URLErrorase:ifhasattr(e,"code"):print(e.code)ifhasattr(e,"reason"):print(e.reason)returnhtml#保存数据到表格defsaveData(datalist,savepath):print("save......")book=xlwt.Workbook(encoding="utf-8",style_compression=0)#创建工作簿objectsheet=book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)#创建工作表col=("电影详情链接","图片链接","电影中文名","电影外文名","评分","评论数","概况","相关信息")foriinrange(0,8):sheet.write(0,i,col[i])#列名foriinrange(0,250):#print("Article%d"%(i+1))#输出语句,用来测试数据=datalist[i]forjinrange(0,8):sheet.write(i+1,j,data[j])#databook.save(savepath)#save#defsaveData2DB(datalist,dbpath):#init_db(dbpath)#conn=sqlite3.connect(dbpath)#cur=conn.cursor()#fordataindatalist:#forindexinrange(len(data)):#ifindex==4orindex==5:#continue#data[index]='"'+data[index]+'"'#sql='''#insertintomovie250(#info_link,pic_link,cname,ename,score,rated,introduction,info)#values(%s)'''%",".join(data)##print(sql)#输出查询语句用于测试#cur.execute(sql)#conn.commit()#cur.close#conn.close()#definit_db(dbpath):#sql='''#createtablemovie250(#idintegerprimarykeyautoincrement,#info_linktext,#pic_linktext,#cnamevarchar,#enamevarchar,#scorenumeric,#ratednumeric,#introductiontext,#infotext#)###'''#创建数据表#conn=sqlite3.connect(dbpath)#cursor=conn.cursor()#cursor.execute(sql)#conn.commit()#conn.close()#保存数据到数据库if__name__=="__main__":#程序执行时#调用函数main()#init_db("movietest.db")print("抓取完成!")下面我跟着上面的代码接下来给大家讲解和分析--coding=utf-8--第一个是设置编码为utf-8,写在开头防止乱码,然后是下面import是导入一些库来做准备工作,(sqlite3这个我没有用到库所以注释掉了)。以下一些发现以正则表达式开头,这些正则表达式用于我们过滤信息。(ReCook是做正则表达式用的,也可以用正则表达式,不是必须的。)大体流程分三步:1.抓取网页2.将数据一一分析3.保存网页先来分析流程1,爬取网页,baseurl就是我们要爬取的网页的url,往下走,调用getData(baseurl),我们看getData方法foriinrange(0,10):#调用函数获取页面信息,10次url=baseurl+str(i*25)这段时间你可能看不懂,其实是这样的:因为电影评分Top250,每个页面只显示25,所以我们需要访问页10次,25*10=250。baseurl="https://movie.douban.com/top250?start="我们只需要在baseurl后面加一个数字就可以跳转到对应的页面,比如https://movie.douban.com/top250?start=25我放了一个超链接,你可以点进去看看你会跳转到哪个页面,毕竟熟能生巧。然后调用askURL请求网页。该方法是请求网页的主要方法。恐怕大家翻页都有些困难。我再把代码复制一遍,让大家有个直观的体验。defaskURL(url):head={#模拟浏览器Header信息,向豆瓣服务器发送消息"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.122Safari/537.36"}#Useragent,表示告诉豆瓣服务器我们是什么型号的机器和浏览器(本质上是告诉浏览器我们可以接收到什么级别的文件内容)request=urllib.request.Request(url,headers=head)html=""try:response=urllib.request.urlopen(request)html=response.read().decode("utf-8")excepturllib.error.URLErrorase:ifhasattr(e,"code"):print(e.code)ifhasattr(e,"reason"):print(e.reason)returnhtml这个askURL是用来向网页发送请求的,所以这里又是一个老问题,为什么要在这里写head呢?这是因为如果我们不写如果你访问一些网站,你会被识别为爬虫并显示错误。错误代码418是一个梗。你可以百度一下。假装我们是一个浏览器,这样我们就不会被识别出来,伪装成一个身份,我们继续往下,html=response.read().decode("utf-8")就是我们读取的网页内容,设置编码为utf-8,目的是为了防止乱码。访问成功后,来到第二个流程:2.ParsingthedataonebyParsingthedata这里我们用到了库BeautifulSoup(靓汤),这个库几乎是爬虫必备的库,不管怎么写.下面开始寻找符合我们要求的数据,使用BeautifulSoup的方法和re库的正则表达式进行匹配,findLink=re.compile(r'