爬虫,基于request,bs4 的简单实例整合

简单爬虫示例

爬取抽屉,以及自动登陆抽屉点赞

先查看首页拿到cookie,然后登陆要携带首页拿到的 cookie 才可以通过验证

""""""

# ################################### 示例一:爬取数据(携带请起头) ###################################
"""
import requests
from bs4 import BeautifulSoup

r1 = requests.get(
    url=‘https://dig.chouti.com/‘,
    headers={
        ‘user-agent‘:‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘
    }
)

soup = BeautifulSoup(r1.text,‘html.parser‘)
content_list = soup.find(name=‘div‘,attrs={"id":"content-list"})
item_list = content_list.find_all(name=‘div‘,attrs={‘class‘:‘item‘})
for item in item_list:
    a = item.find(name=‘a‘,attrs={‘class‘:‘show-content color-chag‘})
    print(a.text.strip())

"""
# ################################### 示例二:登陆点赞 ###################################
"""
import requests
# 1. 查看首页
r1 = requests.get(
    url=‘https://dig.chouti.com/‘,
    headers={
        ‘user-agent‘:‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘
    }
)

# 2. 提交用户名和密码
r2 = requests.post(
    url=‘https://dig.chouti.com/login‘,
    headers={
        ‘user-agent‘:‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘
    },
    data={
        ‘phone‘:‘8613121758648‘,
        ‘password‘:‘woshiniba‘,
        ‘oneMonth‘:1
    },
    cookies=r1.cookies.get_dict()
    # 套路 正常用户必然会先访问首页然后再登陆
    # 如果你直接登陆必然是爬虫,因此设计在第一次访问首页的时候先创建cookie 并且返回了回去
    # 并且要求你第二次访问的时候要带着这个 cookie
)

# 3. 点赞
r3 = requests.post(
    url=‘https://dig.chouti.com/link/vote?linksId=20435396‘,
    headers={
        ‘user-agent‘:‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘
    },
    cookies=r1.cookies.get_dict()
)
print(r3.text)
"""

# ############## 方式二 session 方式 ##############
"""
# 用 session 自动封装好 cookie 不用在以后自己携带
import requests

session = requests.Session()
i1 = session.get(url="http://dig.chouti.com/help/service")
i2 = session.post(
    url="http://dig.chouti.com/login",
    data={
        ‘phone‘: "8615131255089",
        ‘password‘: "xxooxxoo",
        ‘oneMonth‘: ""
    }
)
i3 = session.post(
    url="http://dig.chouti.com/link/vote?linksId=8589523"
)
print(i3.text)
"""

爬取拉勾网

请求头中存在自定义的验证字段,要想办法拿到才可以正确爬取,以及 Referer 的使用

import re
import requests

"""
密码加密了的时候
    找js 通过 python 实现加密方式
    直接把加密后的密文拿来用
"""

r1 = requests.get(
    url=‘https://passport.lagou.com/login/login.html‘,
    headers={
        ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘,
    }
)

"""
    有两个奇怪的东西,是网站的防御机制
        这两个数据必然是对方发给我们的
        要不在响应头里面,要不在响应体里面
            响应头看不到。那就去响应体里面找。
"""

# 因为不是写在标签里面的。只能用正则来拿了
X_Anti_Forge_Token = re.findall("X_Anti_Forge_Token = ‘(.*?)‘", r1.text, re.S)[0]
X_Anti_Forge_Code = re.findall("X_Anti_Forge_Code = ‘(.*?)‘", r1.text, re.S)[0]
# print(X_Anti_Forge_Token, X_Anti_Forge_Code)

r2 = requests.post(
    url=‘https://passport.lagou.com/login/login.json‘,
    headers={
        ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘,
        ‘X-Anit-Forge-Code‘:X_Anti_Forge_Code,
        ‘X-Anit-Forge-Token‘:X_Anti_Forge_Token,
        ‘Referer‘: ‘https://passport.lagou.com/login/login.html‘, # 上一次请求地址是什么?很多网站会要求带着个才可以继续
    },
    data={
        "isValidate": True,
        ‘username‘: ‘15131255089‘,
        ‘password‘: ‘ab18d270d7126ea65915c50288c22c0d‘,    # 直接发密文了
        ‘request_form_verifyCode‘: ‘‘,
        ‘submit‘: ‘‘
    },
    cookies=r1.cookies.get_dict()
)
print(r2.text)

自动登陆GitHub

scrf_token 的验证

""""""
# ################################### 示例三:自动登录GitHub ###################################
# 1. GET,访问登录页面
"""
- 去HTML中找隐藏的Input标签获取csrf token
- 获取cookie
"""

# 2. POST,用户名和密码
"""
- 发送数据:
    - csrf
    - 用户名
    - 密码
- 携带cookie
"""

# 3. GET,访问https://github.com/settings/emails
"""
- 携带 cookie
"""

import requests
from bs4 import BeautifulSoup

# ##########################################################

#  访问登陆页面,获取 authenticity_token
i1 = requests.get(
    url=‘https://github.com/login‘
    )
soup1 = BeautifulSoup(i1.text, features=‘lxml‘)
tag = soup1.find(name=‘input‘, attrs={‘name‘: ‘authenticity_token‘})
authenticity_token = tag.get(‘value‘) # authenticity_token 拿到
c1 = i1.cookies.get_dict()
i1.close()

#  携带authenticity_token和用户名密码等信息,发送用户验证
form_data = {
"authenticity_token": authenticity_token, # 放在请求体中发过去
    "utf8": "",
    "commit": "Sign in",
    "login": "",
    ‘password‘: ‘‘
}

i2 = requests.post(
    url=‘https://github.com/session‘,
    data=form_data,
    cookies=c1
    )
c2 = i2.cookies.get_dict()
c1.update(c2) # 将两次的 cookie 整合一起
i3 = requests.get(‘https://github.com/settings/repositories‘, cookies=c1)

soup3 = BeautifulSoup(i3.text, features=‘lxml‘)
list_group = soup3.find(name=‘div‘, class_=‘listgroup‘)

from bs4.element import Tag

for child in list_group.children:
    if isinstance(child, Tag):
        project_tag = child.find(name=‘a‘, class_=‘mr-1‘)
        size_tag = child.find(name=‘small‘)
        temp = "项目:%s(%s); 项目路径:%s" % (project_tag.get(‘href‘), size_tag.string, project_tag.string, )
        print(temp)

总结

请求头:

user-agent
referer
host
cookie

特殊请起头,查看上一次请求获取内容。

‘X-Anit-Forge-Code‘:...
‘X-Anit-Forge-Token‘:...

请求体:

- 原始数据
- 原始数据 + token
- 密文
  - 找算法
  - 使用密文

套路:

- post登录获取cookie,以后携带cookie
- get获取未授权cookie,post登录携带cookie去授权,以后携带cookie

原文地址:https://www.cnblogs.com/shijieli/p/10358576.html

时间: 2024-10-12 17:07:46

爬虫,基于request,bs4 的简单实例整合的相关文章

基于CSOCKET的Client简单实例(转)

原文转自 http://blog.csdn.net/badagougou/article/details/78410382 第一步:创建一个基类为CSOCKET类的新类,Cclient,并在主对话框类创建对象Cclient client1 第二步:创建并连接服务器,注意IP地址和端口号要匹配服务器 在主对话框OnInitDialog()里调用. // TODO: 在此添加额外的初始化代码 client1.Create(); client1.Connect(_T("192.168.42.87&qu

java网页爬虫简单实例详解——获取天气预报。

[本文介绍] 爬取别人网页上的内容,听上似乎很有趣的样子,只要几步,就可以获取到力所不能及的东西,例如呢?例如天气预报,总不能自己拿着仪器去测吧!当然,要获取天气预报还是用webService好.这里只是举个例子.话不多说了,上看看效果吧. [效果] 我们随便找个天气预报的网站来试试:http://www.weather.com.cn/html/weather/101280101.shtml 从图中可用看出,今天(6日)的天气.我们就以这个为例,获取今天的天气吧! 最终后台打印出: 今天:6日

request模块的简单使用+爬虫小程序

爬虫之request 各种请求方式 get host_url = 'https://www.pearvideo.com/' #浏览器的版本等信息 headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36" } res = requests.ge

10分钟学会基于ASP.NET的 JQuery实例 (转)

本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再代码里使用 <script src="_scripts/jQuery-1.2.6.js" type="text/javascript"></script>即可,当然,由于微软已经把JQuery集成到VS里,所以你可以到WWW.ASP.NET/aj

【转】Android Https服务器端和客户端简单实例

转载地址:http://blog.csdn.net/gf771115/article/details/7827233 AndroidHttps服务器端和客户端简单实例 工具介绍 Eclipse3.7 Tomcat 6.0.18(免安装版) Android2.1开发环境(在Eclipse中配置好) 前提条件 JDK环境要使用我们自己安装的,笔者JDK安装目录为D:\Java\jdk1.6.0_22,在Eclipse的Window-preference-installedJREs中,只选用我们自己安

基于Python的接口测试框架实例

文章来源:http://www.jb51.net/article/96481.htm 下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 背景 最近公司在做消息推送,那么自然就会产生很多接口,测试的过程中需要调用接口,我就突然觉得是不是可以自己写一个测试框架? 说干就干,由于现有的接口测试工具Jmeter.SoupUI等学习周期有点长,干脆自己写一个吧,不求人,所有功能自己都能一清二楚. 当然,写工具造轮子只是

Log4j日志管理的简单实例

大型项目中很多情况下要分析程序的日志信息,如何管理自己的日志信息至关重要.在应用程序中添加日志记录总的来说基于三个目的 , 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代码运行时轨迹,作为日后审计的依据: 担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息. 最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类 来封装此类操作,而不是让一系列的打印语句充斥了代码的主体. 这篇文章主

在net Core3.1上基于winform实现依赖注入实例

目录 在net Core3.1上基于winform实现依赖注入实例 1.背景 2.依赖注入 2.1依赖注入是什么? 2.1依赖注入的目的 2.2依赖注入带来的好处 2.2.1生命周期的控制 2.2.2 实现了展现层(调用者)与服务类之间的解耦 2.2.3 开发者不用再去考虑依赖之间的关系 2.3 依赖注入使用的设计模式 2.3.1 代理模式 2.3.2 工厂模式 3.在Net Core 3.1上基于winform实现依赖注入 3.1 Net Core 3.1中对winform的支持. 3.2 w

session 对象的简单实例

一个session对象的简单实例: 1.登录界面:使用简单的html表单提交界面. <%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "ht