python怎么写爬虫,python爬虫教程(非常详细)

  python怎么写爬虫,python爬虫教程(非常详细)

  第一篇:爬虫的基本原理;爬虫自动化操作流程(灵魂所在);2.爬虫的基本操作;1.发送请求;1.1演示:1.2如何检查你的用户代理?2.提取信息2.1正则表达式的常用规则2.2正则表达式的常用方法2.3解析库介绍1:美汤介绍2.4解析库2: pyquery 3。数据存储3.1 JSON保存3.2 CSV保存3.2关系型数据库MySQL保存3.3非关系型数据库MonogoDB保存

  三。爬猫眼电影100 1。源代码2。结果

  一、爬虫的基本原理:爬虫是获取网页并提取和保存信息的自动化程序。

  如果把互联网比作一张大网,那么每个网页就是这张大网的一个节点,网页之间的链接就相当于节点之间的连接。爬虫在每个节点获取他的信息,然后通过连接爬到另一个节点,这样就可以把全网所有节点的数据都爬下来。

  爬虫的自动化运行过程(灵魂所在)发送HTTP请求获取网页源代码,从返回的网页源代码中提取信息并保存提取的信息。在提取信息的过程中,经常会使用正则表达式来获取信息。

  二。爬行动物的基本操作

  1.使用请求库发送请求简单易用。

  这些文档的连接方式如下:

  中文文档官方网站中文版

  1.1演示:导入请求

  标题={

  用户代理: Mozilla/5.0(Windows NT 10.0;Win64x64) AppleWebKit/537.36 (KHTML,像壁虎)\

   chrome/80 . 0 . 3987 . 106 Safari/537.36

  }

  r=requests . get( http://maoyan . com/board/4 ,headers=headers)

  如果r.status_code==200:

  如果我们不提供用户代理,许多网站是不允许抓取的,所以

  1.2如何检查自己的用户代理?Chrome:只需在浏览器的搜索框中输入about:version即可。

  任何其他浏览器都会运行这个脚本:

  (将以下代码复制到新创建的空html文件中,并选择要运行的浏览器)

  超文本标记语言

  头

  脚本

  window . onload(alert(navigator . user agent))

  /脚本

  /头

  /html

  2.提取信息发送请求并成功获取网页源代码后,我们需要提取我们需要的信息。正则表达式是一种非常常用的方法。

  2.1正则表达式常见正则表达式

  意义

  \w

  匹配字母、数字、下划线

  \W

  与字母、数字或下划线不匹配的字符

  \s

  匹配任何空白字符,相当于[\t\n\r\f]

  \S

  匹配任何非空白字符。

  \d

  匹配任意数字,相当于[0-9]

  \D

  匹配任何非数字字符。

  \A

  匹配字符串开始

  \Z

  匹配字符串的结尾,如果有换行符,只匹配换行符之前的结尾字符串。

  \z

  匹配字符串的结尾,如果有换行符,也匹配换行符。

  \G

  完成最后一次匹配的位置。

  \n

  匹配换行符。

  \t

  匹配一个选项卡。

  ^

  匹配字符串的开头。

  $

  匹配字符串的结尾。

  匹配任何字符,除了换行符。当re。DOTALL标志,则可以匹配包括换行符在内的任何字符。

  [ … ]

  用于表示一组单独列出的字符,如[abc]匹配A、B或c。

  [ ^… ]

  匹配不在[]中的字符,例如[^abc]匹配除a、b和c以外的字符

  *

  匹配0个或多个表达式,贪婪

  匹配一个或多个表达式,贪婪

  ?

  陪0或1表情,不贪心。

  {n}

  精确匹配前n个表达式,不贪心。

  {n,m}

  匹配前面的表达式n到m次,贪心

  ab

  匹配a或b

  ()

  匹配括号中的表达式来代表一个组。

  2.2正则表达式的常用方法compile()match()search()find all()sub()我们每次根据源代码写我们的正则表达式模板,都很繁琐,不够美观。那么一套分析源代码,轻松获取我们需要的信息的工具就很有必要了。

  2.3分析库1简介:美汤

  Beautiful Soup是一个Python库,可以从HTML或XML文件中提取数据。它可以通过你喜欢的转换器实现通常的文档导航、搜索和修改方式。Beautiful Soup将复杂的HTML文档转换成复杂的树形结构。每个节点都是一个Python对象,所有对象都可以分为四种类型:标签、可导航字符串、美汤、评论。

  新船包装,新船体验

  官方中文文件

  美汤解析的时候其实取决于解析器:

  根据需要选择。

  句法分析程序

  施用方式

  优势

  处于不利地位的

  Python标准库

  BeautifulSoup(标记,“html.parser”)

  Python内置的标准库,执行速度适中,文档容错能力强。

  Python 2.7.3或3.2.2之前版本的文档容错能力较差)

  Lxml HTML解析器

  BeautifulSoup(标记,“lxml”)

  速度快,文件容错能力强。

  需要安装c语言库。

  Lxml XML解析器

  BeautifulSoup(标记,[lxml-xml])

  BeautifulSoup(标记,“xml”)

  Fast,唯一支持XML的解析器

  需要安装c语言库。

  html5lib

  BeautifulSoup(标记,“html5lib”)

  最好的容错,通过浏览器解析文档,生成HTML5格式的文档。

  速度慢,不依赖外部扩张

  如果你觉得靓汤还是有点麻烦或者不习惯

  2.4解析库2简介:pyquery

  和JQuery的语法很像,CSS选择器对于写过前端的朋友来说简直不好用。

  易于上手,享受丝滑。

  公文

  初始化

  Pyquery导入pyquery作为PQ HTML字符串初始化doc=pq(html)URL初始化doc=pq(https://baidu.com )文件初始化doc=pq(filename=doc.html)CSS选择器

  doc=pq(html)

  doc(“#集装箱ul li”)

  #在id=container节点下获取li节点节点查找

  子节点

  find()和children()的父节点

  Parent()兄弟节点

  兄弟()遍历

  项目()

  信息采集

  属性

  Attr()文本

  Text()、html()具体使用细节可以在官方文档中找到。

  3.数据存储#获得的信息结果

  with open(result.txt , a ,encoding=utf-8) as f:

  F.write(result)这个也可以保存数据,但是不够酷。

  3.1以JSON格式保存

  JSON JavaScript E Object Notation(JavaScript Object Notation)通过对象数组表示数据,是一种轻量级的数据交换格式,结构简洁,结构化程度高。

  对象:

  在JavaScript中,{}括起来的内容表示对象,类似于python中的字典写法,其结构为{

  key0: value0,

  关键字1:值1

  }数组

  在JavaScript中,用[]括起来的部分代表一个数组,和python中的列表写法很像,结构是[value0 , value1]。总之,JSON数据格式是:

  [

  {

  姓名:鲍勃,

  年龄: 12

  },

  {

  姓名:汤姆,

  年龄: 11

  }

  ]JSON数据要用双引号括起来,不能用单引号,否则解析会有问题。

  JSON解析的过程就是把字符串转换成JSON对象,反之亦然。

  load()和dumps()方法可以轻松实现数据转换。

  3.2以CSV格式保存

  CSV,全称逗号分隔值,中文可称为逗号分隔值或字符分隔值,其文件以纯文本方式处理表格数据。

  文件格式如下

  num1、num2、num3

  1,2,3

  a、b、c写csv文件:

  导入csv

  用open(data.csv , w )作为csv文件:

  文件名=[id , name , age]

  作家=csv。DictWriter(csvfile,字段名=文件名)

  writer.writerow(id:11001 ,姓名:鲍勃,年龄: 10 )

  writer.writerow(id:11002 , name:Tim , age: 10 )

  Writer.writerow (id: 11003 , name: Mike , age: 10 )或:

  导入csv

  用open(data.csv , w )作为csv文件:

  作家=csv。编写器(CSV文件)

  writer.writerow(id , name , age )

  writer.writerow(11001 , Bob , 10 )

  writer.writerow(11002 , Tim , 10 )

  Writer.writerow (11003 , Mike , 10 )也有同样的效果。

  读取csv文件:

  导入csv

  将open(data.csv ,w)作为csv文件:

  reader=csv.reader(csvfile)

  对于读取器中的行:

  打印(行)

  3.2关系数据库的MySQL存储

  关系型数据库是基于数据模型之关系模型的一种数据库,区别于层次数据库和网状数据库。关系数据库通过表来存储数据,表的每一列称为一个字段,对应一个域,表示实体的某一属性,表的每一行称为一条记录,对应一个元组,是某一实体分量的集合。不同的表之间通过主键和外键进行关联,多表关联组成关系型数据库。

  有关大蟒连接关系型数据库以及污垢操作:

  导入已安装

  #连接数据库

  db=pymysql。connect(主机= localhost ,用户=root ,

  密码=123456 ,端口=3306,数据库=蜘蛛)

  cursor=db.cursor()

  #增

  sql0=INSERT INTO table(列0,列1,列2)值(%s,%s,%s)#此类

  #删

  sql1=从表中删除在哪里条件 #此类

  #查

  sql2= SELECT * FROM table WHERE表此类

  #改

  sql3=更新表集列=%s在哪里条件 #此类

  尝试:

  游标。执行(sql)

  #或附加数据

  cursor.execut(sql,data)

  数据库提交()

  除了:

  db.rollback()

  db.close()会用结构化查询语言查询的,这个可以直接上手用

  3.3非关系型数据库MonogoDB保存

  MongoDB是由C语言编写的非关系型数据库,是一个基于分布式文件存储订单的开源数据库系统,其内存储存形式类似于数据对象,他的字段值可以包含其他文档,数组以及文档数组,非常灵活。

  官方文档内容不多,能很快掌握

  三。爬取猫眼电影前100采用请求PyQuery JSON

  1.源码导入请求

  导入数据

  进口是

  从pyquery导入PyQuery作为体能商数

  定义获取页面(m_url):

  标题={

  用户代理: Mozilla/5.0(Windows NT 10.0;win 64x 64)apple WebKit/537.36(KHTML,像壁虎)\

  铬/80。0 .3987 .106 Safari/537.36

  }

  r=requests.get(m_url,headers=headers)

  如果r .状态代码==200:

  回复短信

  不返回

  def parser_one_page(m_html):

  #正则表达式模板

  “”模式=re。编译( DD .*?董事会指数。*?(.*?)/i .*?src=(即.*?).*?姓名。*?答。*?(.*?)/a 。*?明星。*?(.*?)/p .*?发布时间。*?(.*?)/p .*?整数。*?(.*?)/i .*?

  分数。*?(.*?)/i .*?/dd ,回复.s)

  项目=re。 查找全部(模式,m_html)

  #PyQuery

  doc=pq(m_html)

  对于doc.find中的项目( dd ).项目():

  产量{

  索引:项目(仪表板索引)。text(),

   image: item(img.board-img ).属性(数据-src’),

  标题:项目( p.name ).儿童( a ).text(),

  actor: item(p.star ).文本()。strip()[3:] if len(item(p.star)).文本()。strip()) 3 else ,

   time :项目( p.releasetime ).文本()。strip()[5:]if len(item( p . release time)).文本()。strip()) 5 else ,

   score :项目( p.score ).子代( i.integer ).文本()。条状()

  项目( p.score ).孩子( i.fraction ).文本()。条状()

  }

  定义写入文件(内容):

  用打开(毛焰_结果。 txt , a ,编码=utf-8 )作为女:

  f.write(json.dumps(content,indent=2,assure _ ascii=False) \ n )

  定义运行(偏移):

  网址=http://maoyan.com/board/4?offset= str(offset)

  html=get_one_page(url)

  对于解析器_一页中的项目(html):

  写入文件(项目)

  if __name__==__main__ :

  对于范围(10)内的我:

  运行(偏移量=i*10)

  2.结果

  参考资料:《Python3网络爬虫开发实践》,谷歌

  如果对您有帮助,点赞、收藏、关注!

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

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