当前位置:脚本大全 > > 正文

python爬虫经典步骤(详解python爬虫系列之初识爬虫)

时间:2021-10-20 08:29:07类别:脚本大全

python爬虫经典步骤

详解python爬虫系列之初识爬虫

前言

我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识,做网络爬虫还是需要基本的前端的知识的,下面我们进行我们的爬虫讲解

在进行实战之前,我们先给大家看下爬虫的一般讨论,方便大家看懂下面的实例

python爬虫经典步骤(详解python爬虫系列之初识爬虫)

一、爬汽车之家

汽车之家这个网站没有做任何的防爬虫的限制,所以最适合我们来练手

1、导入我们要用到的模块

  • ?
  • 1
  • 2
  • import requests
  • from bs4 import beautifulsoup
  • 2、利用requests模块伪造浏览器请求

  • ?
  • 1
  • 2
  • # 通过代码伪造浏览器请求
  • res = requests.get(https://www.autohome.com.cn/news/)
  • 3、设置解码的方式,python是utf-8,但是汽车之家是用gbk编码的,所以这里要设置一下解码的方式

  • ?
  • 1
  • 2
  • # 设置解码的方式
  • res.encoding = "gbk"
  • 4、把请求返回的对象,传递一个bs4模块,生成一个beautifulsoup对象

  • ?
  • 1
  • soup = beautifulsoup(res.text,"html.parser")
  • 5、这样,我们就可以使用beautifulsoup给我们提供的方法,如下是查找一个li标签,且这个li标签的id属性为auto-channel-lazyload-atricle

  • ?
  • 1
  • 2
  • 3
  • # find是找到相匹配的第一个标签
  • li = soup.find(name="li",attrs={"id":"auto-channel-lazyload-article"})
  • # 这个li是一个标签对象
  • 6、findall方法,是超找符合条件的所有的标签,下面是在步骤5的li标签内查找所有的li标签

  • ?
  • 1
  • li_list = li.find_all(name="li")
  • 7、查找li标签中的不同条件的标签

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • li_list = li.find_all(name="li")
  • for li in li_list:
  •  title = li.find(name="h3")
  •  neirong = li.find(name="p")
  •  href = li.find(name="a")
  •  img = li.find(name="img")
  •  if not title:
  •   continue
  • 8、获取标签的属性

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • # print(title, title.text, sep="标题-->")
  • # print(neirong, neirong.text, sep="内容-->")
  • # print(href, href.attrs["href"], sep="超链接-->")
  •  
  • # 获取标签对接的属性
  • # print(img.attrs["src"])
  • # ret = requests.get(img_src)
  • 9、如果我们下载一个文件,则需要requests.get这个文件,然后调用这个文件对象的content方法

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • src = img.get("src")
  • img_src = src.lstrip("/")
  • file_name = img_src.split("/")[-1]
  • img_src = "://".join(["https",img_src])
  • print(file_name)
  • ret = requests.get(img_src)
  • with open(file_name,"wb") as f:
  •  f.write(ret.content)
  • 10、整体的代码如下

    python爬虫经典步骤(详解python爬虫系列之初识爬虫)

    二、爬抽屉

    这里我们看下如何爬抽屉

    1、首先抽屉有做防爬虫的机制,我们在访问的时候必须要加一个请求头

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • # 实例1:爬取数据,这个网址有做防爬虫机制,所以需要带一个请求头信息,才能让服务端以为我们是浏览器,不然服务端会把我们的请求当做爬虫行为进行拦截
  • # 设置一个请求头
  • chouti = requests.get(url="https://dig.chouti.com/",
  •       headers={
  •        "user-agent":"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •       })
  • 2、这个请求网站会返回一个cookies,通过下面的方法获取cookies

  • ?
  • 1
  • 2
  • print(chouti.cookies.get_dict())
  • # {'gpsd': 'ab141f7a741144216429b6e901da5f34', 'jsessionid': 'aaanxwlwjllku9cgxdynw'}
  • 3、转换页面为一个beautifulsoup对象

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • # 将页面转换成一个beautifulsoup的对象,就可以使用beautifulsoup的方法了
  • soup = beautifulsoup(chouti.text,"html.parser")
  •  
  • news_list = soup.find_all(name="li",attrs={"class":"item"})
  •  
  • for news in news_list:
  •  compont = news.find(name="li",attrs={"class":"part2"})
  •  
  •  print(compont.get("share-title"))
  • python爬虫经典步骤(详解python爬虫系列之初识爬虫)

    4、下面我们看下如何登陆抽屉

    首先我们先通过get方式访问主页

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • # 1、先查看首页
  • r1 = requests.get(url="https://dig.chouti.com/",
  •       headers={
  •        "user-agent":"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •       })
  • 然后我们通过post方式进行登陆,

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • # 2、提交用户名和密码进行登陆
  •  
  • r2 = requests.post(url="https://dig.chouti.com/login",
  •     headers={
  •      "user-agent":"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •     },
  •     data={
  •      "phone":"86139252938822",
  •      "password":"admin",
  •      "onemonth":1
  •     },
  •     cookies=r1.cookies.get_dict()
  •     )
  • python爬虫经典步骤(详解python爬虫系列之初识爬虫)

    最后登陆成功后,我们来实现一个点赞的操作,这里要注意 

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • # 第二次登陆的时候把第一次返回的cookies带上,这个是抽屉这个网站的套路,同样这次登陆也会返回一个cookies,但是登陆这次返回的cookies其实是个迷惑我们的cookies,没有用
  • # print(r2.text)
  • # 登陆失败返回的信息:{"result":{"code":"21101", "message":"手机号或密码错误", "data":{}}}
  • # 登陆成功返回的信息:{"result":{"code":"9999", "message":"", "data":{"complatereg":"0","destjid":"cdu_53218132468"}}}
  •  
  • # 如果登陆成功,通过下面的方法就可以把服务端返回的cookies拿到,以后在发请求,带着cookies去就可以了
  • print(r2.cookies.get_dict())
  • # {'puid': 'b11ec95d3b515ae2677a01f6abd5b916', 'gpid': '01cff9a184bd427789429d1dd556f4d2'}
  •  
  • r3 = requests.post(url="https://dig.chouti.com/link/vote?linksid=25461201",
  •      headers={
  •       "user-agent": "mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •      },
  •      # cookies=r2.cookies.get_dict(),
  •      cookies=r1.cookies.get_dict(),
  •      # 破解抽屉coookies套路
  •      )
  • # 这次点赞,我们同样带的cookies是第一次登陆主页返回的cookies,而不是登陆成功后返回的cookies
  • # print(r3.text)
  • python爬虫经典步骤(详解python爬虫系列之初识爬虫)

    爬抽屉所有的代码如下

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • # 实例1:爬取数据,这个网址有做防爬虫机制,所以需要带一个请求头信息,才能让服务端以为我们是浏览器,不然服务端会把我们的请求当做爬虫行为进行拦截
  •  
  • # 设置一个请求头
  • chouti = requests.get(url="https://dig.chouti.com/",
  •       headers={
  •        "user-agent":"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •       })
  •  
  • # print(chouti.text)
  •  
  • print(chouti.cookies.get_dict())
  • # {'gpsd': 'ab141f7a741144216429b6e901da5f34', 'jsessionid': 'aaanxwlwjllku9cgxdynw'}
  •  
  • # 将页面转换成一个beautifulsoup的对象,就可以使用beautifulsoup的方法了
  • soup = beautifulsoup(chouti.text,"html.parser")
  •  
  • news_list = soup.find_all(name="li",attrs={"class":"item"})
  •  
  • for news in news_list:
  •  compont = news.find(name="li",attrs={"class":"part2"})
  •  
  •  print(compont.get("share-title"))
  •  
  •  
  •  
  • # 1、先查看首页
  • r1 = requests.get(url="https://dig.chouti.com/",
  •       headers={
  •        "user-agent":"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •       })
  •  
  • # r1.cookies.get_dict(),第一次访问主页,服务端就给返回了一个cookies
  •  
  • # 2、提交用户名和密码进行登陆
  •  
  • r2 = requests.post(url="https://dig.chouti.com/login",
  •     headers={
  •      "user-agent":"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •     },
  •     data={
  •      "phone":"8613925293887",
  •      "password":"admin123.",
  •      "onemonth":1
  •     },
  •     cookies=r1.cookies.get_dict()
  •     )
  •  
  •  
  • # 第二次登陆的时候把第一次返回的cookies带上,这个是抽屉这个网站的套路,同样这次登陆也会返回一个cookies,但是登陆这次返回的cookies其实是个迷惑我们的cookies,没有用
  • # print(r2.text)
  • # 登陆失败返回的信息:{"result":{"code":"21101", "message":"手机号或密码错误", "data":{}}}
  • # 登陆成功返回的信息:{"result":{"code":"9999", "message":"", "data":{"complatereg":"0","destjid":"cdu_53218132468"}}}
  •  
  • # 如果登陆成功,通过下面的方法就可以把服务端返回的cookies拿到,以后在发请求,带着cookies去就可以了
  • print(r2.cookies.get_dict())
  • # {'puid': 'b11ec95d3b515ae2677a01f6abd5b916', 'gpid': '01cff9a184bd427789429d1dd556f4d2'}
  •  
  • r3 = requests.post(url="https://dig.chouti.com/link/vote?linksid=25461201",
  •      headers={
  •       "user-agent": "mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •      },
  •      # cookies=r2.cookies.get_dict(),
  •      cookies=r1.cookies.get_dict(),
  •      # 破解抽屉coookies套路
  •      )
  • # 这次点赞,我们同样带的cookies是第一次登陆主页返回的cookies,而不是登陆成功后返回的cookies
  • # print(r3.text)
  • 三、爬github

    github的登陆是form表单做的,所以我们在登陆github的时候需要把cookies和crsf_token都带上

    1、访问github的首页

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • # 1、get,访问登陆页面
  •  
  • r1 = requests.get(url="https://github.com/",
  •      headers={
  •       "user-agent":"mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •       }
  •      )
  • # print(r1.cookies.get_dict())
  • 2、访问登陆页面,需要在隐藏的input标签中找到token,然后获取到

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • r2 = requests.get(url="https://github.com/login",
  •      headers={
  •        "user-agent": "mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •       }
  •      )
  •  
  • login_obj = beautifulsoup(r2.text,"html.parser")
  •  
  • token = login_obj.find(name="form",attrs={"action":"/session"}).find(name="input",attrs={"name":"authenticity_token"}).get("value")
  • python爬虫经典步骤(详解python爬虫系列之初识爬虫)

    3、post方式访问登陆页面,携带上用户名和密码,token和cookies

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • # 2、发送post请求,发送用户名和密码,发送的数据要不仅有用户名和密码,还要带上csrf token和cookie,浏览器发什么,我们就发什么
  • r3 = requests.post(url="https://github.com/session",
  •      headers={
  •        "user-agent": "mozilla/5.0 (windows nt 6.1) applewebkit/537.36 (khtml, like gecko) chrome/57.0.2987.133 safari/537.36"
  •       },
  •      data={
  •       "login":"admin",
  •       "password":"admin",
  •       "authenticity_token":token
  •      },标签:

    猜您喜欢