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

前言

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

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

一、爬汽车之家

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

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

import requests
from bs4 import BeautifulSoup

2、利用requests模块伪造浏览器请求

# 通过代码伪造浏览器请求
res = requests.get(https://www.autohome.com.cn/news/)

3、设置解码的方式,python是utf-8,但是汽车之家是用gbk编码的,所以这里要设置一下解码的方式

# 设置解码的方式
res.encoding = "gbk"

4、把请求返回的对象,传递一个bs4模块,生成一个BeautifulSoup对象

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

5、这样,我们就可以使用BeautifulSoup给我们提供的方法,如下是查找一个div标签,且这个div标签的id属性为auto-channel-lazyload-atricle

# find是找到相匹配的第一个标签
div = soup.find(name="div",attrs={"id":"auto-channel-lazyload-article"})
# 这个div是一个标签对象

6、findall方法,是超找符合条件的所有的标签,下面是在步骤5的div标签内查找所有的li标签

li_list = div.find_all(name="li")

7、查找li标签中的不同条件的标签

li_list = div.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、获取标签的属性

# 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方法

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、整体的代码如下

二、爬抽屉

这里我们看下如何爬抽屉

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

# 实例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

print(chouti.cookies.get_dict())
# {'gpsd': 'ab141f7a741144216429b6e901da5f34', 'JSESSIONID': 'aaaNxWlWjLLKU9CGXDyNw'}

3、转换页面为一个BeautifulSoup对象

# 将页面转换成一个BeautifulSoup的对象,就可以使用BeautifulSoup的方法了
soup = BeautifulSoup(chouti.text,"html.parser")

news_list = soup.find_all(name="div",attrs={"class":"item"})

for news in news_list:
 compont = news.find(name="div",attrs={"class":"part2"})

 print(compont.get("share-title"))

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

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

# 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方式进行登陆,

# 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()
    )

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

# 第二次登陆的时候把第一次返回的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)

爬抽屉所有的代码如下

# 实例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="div",attrs={"class":"item"})

for news in news_list:
 compont = news.find(name="div",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、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,然后获取到

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")

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

# 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
     },
     cookies=r2.cookies.get_dict()
     )

4、以后就可以携带r3这个请求访问的cookies进行登陆github后的操作了

obj = BeautifulSoup(r3.text,"html.parser")

# print(obj.find_all(name="img",attrs={"alt":"@admin"}))

# 3、发送get请求,访问这个路径:https://github.com/settings/profile

r4 = requests.get(url="https://github.com/settings/profile",
    cookies=r3.cookies.get_dict()
    )

print(r4.text)

爬github的所有的代码如下

四、爬拉钩网

最后我们来爬一下拉勾网

1、首先get方式访问拉勾网的首页

import requests
from bs4 import BeautifulSoup

# 如果遇到登陆的密码被加密了有两种解决办法
# 1、获取他的加密方式,然后手动破解
# 2、直接抓包把加密后的数据发过去就可以了

# 1、访问登陆页面
l1 = requests.get(url="https://passport.lagou.com/login/login.html",
     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(l1.text)

2、登陆拉钩网,他的请求头稍微有点特殊

data很简单,我们直接抓包就可以拿到

主要是请求头中的数据是怎么来的,下面这2个是在我们请求登陆的页面中返回的,由于这2项在script标签中,我们只能通过正则表达式来匹配获取

最后是爬拉勾网的所有的代码

以上所述是小编给大家介绍的python爬虫系列之初识爬虫详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • python抓取网页图片示例(python爬虫)

    复制代码 代码如下: #-*- encoding: utf-8 -*-'''Created on 2014-4-24 @author: Leon Wong''' import urllib2import urllibimport reimport timeimport osimport uuid #获取二级页面urldef findUrl2(html):    re1 = r'http://tuchong.com/\d+/\d+/|http://\w+(?<!photos).tuchong.co

  • 零基础写python爬虫之爬虫的定义及URL构成

    一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来. 这样看来,网络爬虫就是一个爬行程序,一个抓

  • Python爬虫框架Scrapy安装使用步骤

    一.爬虫框架Scarpy简介Scrapy 是一个快速的高层次的屏幕抓取和网页爬虫框架,爬取网站,从网站页面得到结构化的数据,它有着广泛的用途,从数据挖掘到监测和自动测试,Scrapy完全用Python实现,完全开源,代码托管在Github上,可运行在Linux,Windows,Mac和BSD平台上,基于Twisted的异步网络库来处理网络通讯,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片. 二.Scrapy安装指南 我们的安装步骤假设你已经安装一下内容:<1>

  • 零基础写python爬虫之urllib2使用指南

    前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节. 1.Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy. 如果想在程序中明确控制 Proxy 而不受环境变量的影响,可以使用代理. 新建test14来实现一个简单的代理Demo: 复制代码 代码如下: import urllib2  enable_proxy = True  proxy_handler = urllib2.ProxyHandler({"http&

  • 零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers

    在开始后面的内容之前,先来解释一下urllib2中的两个个方法:info / geturl urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和geturl() 1.geturl(): 这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许会有重定向.获取的URL或许跟请求URL不同. 以人人中的一个超级链接为例, 我们建一个urllib2_test10.py来比较一下原始URL和重定向的链接: 复制代码

  • 零基础写python爬虫之HTTP异常处理

    先来说一说HTTP的异常处理问题. 当urlopen不能够处理一个response时,产生urlError. 不过通常的Python APIs异常如ValueError,TypeError等也会同时产生. HTTPError是urlError的子类,通常在特定HTTP URLs中产生. 1.URLError 通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生. 这种情况下,异常同样会带有"reason"属性,它是一个tuple(可以理解为不可变的

  • 使用Python编写简单网络爬虫抓取视频下载资源

    我第一次接触爬虫这东西是在今年的5月份,当时写了一个博客搜索引擎,所用到的爬虫也挺智能的,起码比电影来了这个站用到的爬虫水平高多了! 回到用Python写爬虫的话题. Python一直是我主要使用的脚本语言,没有之一.Python的语言简洁灵活,标准库功能强大,平常可以用作计算器,文本编码转换,图片处理,批量下载,批量处理文本等.总之我很喜欢,也越用越上手,这么好用的一个工具,一般人我不告诉他... 因为其强大的字符串处理能力,以及urllib2,cookielib,re,threading这些

  • 零基础写python爬虫之神器正则表达式

    接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. 一. 正则表达式基础 1.1.概念介绍 正则表达式是用于处理字符串的强大工具,它并不是Python的一部分. 其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同. 它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表达式的语法都是一样的. 下

  • 零基础写python爬虫之使用urllib2组件抓取网页内容

    版本号:Python2.7.5,Python3改动较大,各位另寻教程. 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.  类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端, 然后读取服务器端的响应资源. 在Python中,我们使用urllib2这个组件来抓取网页. urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件. 它以urlopen函数的形式提供了一个非常简单的接口. 最简

  • python利用beautifulSoup实现爬虫

    以前讲过利用phantomjs做爬虫抓网页 http://www.jb51.net/article/55789.htm 是配合选择器做的 利用 beautifulSoup(文档 :http://www.crummy.com/software/BeautifulSoup/bs4/doc/)这个python模块,可以很轻松的抓取网页内容 # coding=utf-8 import urllib from bs4 import BeautifulSoup url ='http://www.baidu.

随机推荐