python爬虫介绍,python爬虫百度文库

  python爬虫介绍,python爬虫百度文库

  本文给大家带来一些关于Python的知识,主要是整理爬虫的相关问题。网络爬虫(Web crawler,又称Web spider,web robot)是模拟浏览器发送web请求并接收对请求的响应,按照一定规则自动抓取互联网信息的程序。下面就来看看吧,希望对你有帮助。

  【相关推荐:Python3视频教程】

  00-1010网络爬虫(又称网络蜘蛛、网络机器人)是模拟浏览器发送网络请求和接收请求响应,按照一定规则自动抓取互联网信息的程序。

  原则上,只要浏览器(客户端)能做什么,爬虫就能做什么。

  00-1010互联网大数据时代给了我们生活的便利和网络中海量数据的爆炸式出现。

  以前我们用的是书,报纸,电视,广播,也许还有信息,数量有限,有一定筛选。信息相对有效,但缺点是信息太窄。信息传递不对称,以至于我们的视野受到限制,无法学到更多的信息和知识。

  大数据时代,突然之间,我们可以自由获取信息,我们获得了大量的信息,但大部分都是无效的垃圾信息。

  比如新浪微博,一天产生几亿条状态更新,而在百度搜索引擎,你可以用一亿条随机搜索到一条——的减肥消息。

  在如此海量的信息碎片中,如何才能获取对自己有用的信息?

  答案是筛选!

  我们只需要通过某种技术收集相关内容,分析删除,就可以得到我们真正需要的信息。

  这种信息收集、分析和整合的工作可以应用于广泛的领域,无论是生活服务、出行、金融投资,还是各种制造业的产品市场需求等.所有人都可以利用这项技术获得更准确有效的信息。

  网络爬虫技术,虽然有一个奇怪的名字,让人第一反应是一个软绵绵蠕动的生物,但它却是一个可以在虚拟世界中前行的利器。

  00-1010我们通常说Python爬虫。其实这里可能有一个误解。爬虫并不是Python独有的。可以做爬虫的语言有很多,比如PHP,JAVA,C#,C,Python。选择Python作为爬虫,是因为它相对简单,功能齐全。

  首先,我们需要下载python。我下载了最新的正式版3.8.3。

  其次,我们需要一个运行Python的环境,我用的是pychram。

  也可以从官网下载,

  我们还需要一些库来支持爬虫的运行(Python可能会附带一些库)

  这就是所有这些图书馆。我认真地在后面写了评论。

  (爬虫运行时,不一定只需要以上库。这取决于你的爬虫的一个具体的编写方法。反正如果你需要库,我们可以直接在setting里面安装。)

  00-1010我做的是抓取豆瓣分级电影Top250的爬虫代码。

  这是我们要爬的网站:https://movie.douban.com/top250.

  我已经爬完了。我给你看看效果图。我将抓取的内容保存在xls中。

  我们的内容是:电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,相关信息。.

  00-1010先把代码发上来,然后我根据代码一步步分析。

  # -*-编码=utf-8 -*-

  从bs4导入BeautifulSoup #网页解析获取数据

  导入#正则表达式,用于文本匹配` 2

  导入urllib。请求,urllib。错误#创建URL并获取网页数据。

  为excel操作导入xlwt #

  #导入sqlite3 #来操作sqlite数据库

  findLink=re.compile(ra href=(。*?)“”)#创建正则表达式对象,拍卖电影细节链接的规则。

  findImgSrc=re.compile(rimg。*src=(。*?)“”,re。s)

  findTitle=re.compile。*)/span’)

  find rating=re.compile(r span class= rating _ num property= v : average (。*)/span’)

  Find judge=re.pile (r span (\ d *)个人评估/span )

  findInq=re.compile(rspan class

  ="inq">(.*)</span>')

  findBd = re.compile(r'<p class="">(.*?)</p>', re.S)

  def main():

   baseurl = "https://movie.douban.com/top250?start=" #要爬取的网页链接

   # 1.爬取网页

   datalist = getData(baseurl)

   savepath = "豆瓣电影Top250.xls" #当前目录新建XLS,存储进去

   # dbpath = "movie.db" #当前目录新建数据库,存储进去

   # 3.保存数据

   saveData(datalist,savepath) #2种存储方式可以只选择一种

   # saveData2DB(datalist,dbpath)

  # 爬取网页

  def getData(baseurl):

   datalist = [] #用来存储爬取的网页信息

   for i in range(0, 10): # 调用获取页面信息的函数,10次

   url = baseurl + str(i * 25)

   html = askURL(url) # 保存获取到的网页源码

   # 2.逐一解析数据

   soup = BeautifulSoup(html, "html.parser")

   for item in soup.find_all('p', class_="item"): # 查找符合要求的字符串

   data = [] # 保存一部电影所有信息

   item = str(item)

   link = re.findall(findLink, item)[0] # 通过正则表达式查找

   data.append(link)

   imgSrc = re.findall(findImgSrc, item)[0]

   data.append(imgSrc)

   titles = re.findall(findTitle, item)

   if (len(titles) == 2):

   ctitle = titles[0]

   data.append(ctitle)

   otitle = titles[1].replace("/", "") #消除转义字符

   data.append(otitle)

   else:

   data.append(titles[0])

   data.append(' ')

   rating = re.findall(findRating, item)[0]

   data.append(rating)

   judgeNum = re.findall(findJudge, item)[0]

   data.append(judgeNum)

   inq = re.findall(findInq, item)

   if len(inq) != 0:

   inq = inq[0].replace("。", "")

   data.append(inq)

   else:

   data.append(" ")

   bd = re.findall(findBd, item)[0]

   bd = re.sub('<br(\s+)?/>(\s+)?', "", bd)

   bd = re.sub('/', "", bd)

   data.append(bd.strip())

   datalist.append(data)

   return datalist

  # 得到指定一个URL的网页内容

  def askURL(url):

   head = { # 模拟浏览器头部信息,向豆瓣服务器发送消息

   "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122 Safari / 537.36"

   }

   # 用户代理,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)

   request = urllib.request.Request(url, headers=head)

   html = ""

   try:

   response = urllib.request.urlopen(request)

   html = response.read().decode("utf-8")

   except urllib.error.URLError as e:

   if hasattr(e, "code"):

   print(e.code)

   if hasattr(e, "reason"):

   print(e.reason)

   return html

  # 保存数据到表格

  def saveData(datalist,savepath):

   print("save.......")

   book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建workbook对象

   sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True) #创建工作表

   col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")

   for i in range(0,8):

   sheet.write(0,i,col[i]) #列名

   for i in range(0,250):

   # print("第%d条" %(i+1)) #输出语句,用来测试

   data = datalist[i]

   for j in range(0,8):

   sheet.write(i+1,j,data[j]) #数据

   book.save(savepath) #保存

  # def saveData2DB(datalist,dbpath):

  # init_db(dbpath)

  # conn = sqlite3.connect(dbpath)

  # cur = conn.cursor()

  # for data in datalist:

  # for index in range(len(data)):

  # if index == 4 or index == 5:

  # continue

  # data[index] = '"'+data[index]+'"'

  # sql = '''

  # insert into movie250(

  # info_link,pic_link,cname,ename,score,rated,instroduction,info)

  # values (%s)'''%",".join(data)

  # # print(sql) #输出查询语句,用来测试

  # cur.execute(sql)

  # conn.commit()

  # cur.close

  # conn.close()

  # def init_db(dbpath):

  # sql = '''

  # create table movie250(

  # id integer primary key autoincrement,

  # info_link text,

  # pic_link text,

  # cname varchar,

  # ename varchar ,

  # score numeric,

  # rated numeric,

  # instroduction text,

  # info text

  # )

  #

  #

  # ''' #创建数据表

  # conn = sqlite3.connect(dbpath)

  # cursor = conn.cursor()

  # cursor.execute(sql)

  # conn.commit()

  # conn.close()

  # 保存数据到数据库

  if __name__ == "__main__": # 当程序执行时

   # 调用函数

   main()

   # init_db("movietest.db")

   print("爬取完毕!")下面我根据代码,从下到下给大家讲解分析一遍-- codeing = utf-8 --,开头的这个是设置编码为utf-8 ,写在开头,防止乱码。

  然后下面 import就是导入一些库,做做准备工作,(sqlite3这库我并没有用到所以我注释起来了)。
下面一些find开头的是正则表达式,是用来我们筛选信息的。
(正则表达式用到 re 库,也可以不用正则表达式,不是必须的。)
大体流程分三步走:

  1. 爬取网页
2.逐一解析数据
3. 保存网页

  先分析流程1,爬取网页,baseurl 就是我们要爬虫的网页网址,往下走,调用了 getData(baseurl) ,
我们来看 getData方法

  

 for i in range(0, 10): # 调用获取页面信息的函数,10次

   url = baseurl + str(i * 25)

这段大家可能看不懂,其实是这样的:
因为电影评分Top250,每个页面只显示25个,所以我们需要访问页面10次,25*10=250。

  

baseurl = "https://movie.douban.com/top250?start="
我们只要在baseurl后面加上数字就会跳到相应页面,比如i=1时

  https://movie.douban.com/top250?start=25

  我放上超链接,大家可以点击看看会跳到哪个页面,毕竟实践出真知。

  然后又调用了askURL来请求网页,这个方法是请求网页的主体方法,
怕大家翻页麻烦,我再把代码复制一遍,让大家有个直观感受

  

def askURL(url):

   head = { # 模拟浏览器头部信息,向豆瓣服务器发送消息

   "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122 Safari / 537.36"

   }

   # 用户代理,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)

   request = urllib.request.Request(url, headers=head)

   html = ""

   try:

   response = urllib.request.urlopen(request)

   html = response.read().decode("utf-8")

   except urllib.error.URLError as e:

   if hasattr(e, "code"):

   print(e.code)

   if hasattr(e, "reason"):

   print(e.reason)

   return html

这个askURL就是用来向网页发送请求用的,那么这里就有老铁问了,为什么这里要写个head呢?

  这是因为我们要是不写的话,访问某些网站的时候会被认出来爬虫,显示错误,错误代码

  

418

这是一个梗大家可以百度下,

  

418 I’m a teapot

  The HTTP 418 I’m a teapot client error response code indicates that
the server refuses to brew coffee because it is a teapot. This error
is a reference to Hyper Text Coffee Pot Control Protocol which was an
April Fools’ joke in 1998.

  

我是一个茶壶

  所以我们需要 “装” ,装成我们就是一个浏览器,这样就不会被认出来,
伪装一个身份。

  来,我们继续往下走,

  

 html = response.read().decode("utf-8")
这段就是我们读取网页的内容,设置编码为utf-8,目的就是为了防止乱码。
访问成功后,来到了第二个流程:

  2.逐一解析数据

  解析数据这里我们用到了 BeautifulSoup(靓汤) 这个库,这个库是几乎是做爬虫必备的库,无论你是什么写法。

  下面就开始查找符合我们要求的数据,用BeautifulSoup的方法以及 re 库的
正则表达式去匹配,

  

findLink = re.compile(r'<a href="(.*?)">') # 创建正则表达式对象,标售规则 影片详情链接的规则

  findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S)

  findTitle = re.compile(r'<span class="title">(.*)</span>')

  findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')

  findJudge = re.compile(r'<span>(\d*)人评价</span>')

  findInq = re.compile(r'<span class="inq">(.*)</span>')

  findBd = re.compile(r'<p class="">(.*?)</p>', re.S)

匹配到符合我们要求的数据,然后存进 dataList , 所以 dataList 里就存放着我们需要的数据了。

  最后一个流程:

  3.保存数据

  

 # 3.保存数据

   saveData(datalist,savepath) #2种存储方式可以只选择一种

   # saveData2DB(datalist,dbpath)

保存数据可以选择保存到 xls 表, 需要(xlwt库支持)
也可以选择保存数据到 sqlite数据库, 需要(sqlite3库支持)

  这里我选择保存到 xls 表 ,这也是为什么我注释了一大堆代码,注释的部分就是保存到 sqlite 数据库的代码,二者选一就行

  保存到 xls 的主体方法是 saveData (下面的saveData2DB方法是保存到sqlite数据库):

  

def saveData(datalist,savepath):

   print("save.......")

   book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建workbook对象

   sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True) #创建工作表

   col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")

   for i in range(0,8):

   sheet.write(0,i,col[i]) #列名

   for i in range(0,250):

   # print("第%d条" %(i+1)) #输出语句,用来测试

   data = datalist[i]

   for j in range(0,8):

   sheet.write(i+1,j,data[j]) #数据

   book.save(savepath) #保存

创建工作表,创列(会在当前目录下创建),

  

 sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True) #创建工作表

   col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")

然后把 dataList里的数据一条条存进去就行。

  最后运作成功后,会在左侧生成这么一个文件

  

  打开之后看看是不是我们想要的结果

  

  成了,成了!如果我们需要以数据库方式存储,可以先生成 xls 文件,再把 xls 文件导入数据库中,就可以啦!

  【相关推荐:Python3视频教程 】以上就是Python爬虫超详细讲解的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!

  

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: