day01 初见python爬虫之“爬校花网”和“自动登录github”

首先我们来解释一下几个概念:

1、什么是爬虫?

  爬取数据。

2、什么是互联网?

  由一堆网络设备、把一台台的计算机互联到一起称之为互联网。

3、互联网建立的目的:

  数据的传递与数据的共享。

4、什么是数据?

列如:

电商平台的商品信息(京东、淘宝、亚马逊)

租房平台的房源信息(链家、自如)

股票证券的投资信息(东方财富、雪球网)

12306的票务信息(抢票)

5、什么是上网?

普通用户:

打开浏览器————>输入网址————>往目标主机发送请求————>返回响应数据————>把数据渲染到浏览器中

爬虫程序:

模拟浏览器————>往目标主机发送请求————>返回响应数据————>解析并提取有价值的数据————>保存数据(文件写入本地,持久化到数据库中)

6、爬虫的全过程

  • 1)发送请求(请求库:Requests/Selenium)
  • 2)获取响应数据
  • 3)解析数据(解析库:BeautifulSoup4)
  • 4)保存数据(存储库:文件保存、MongoDB)

总结:我们互联网的数据比喻成一座宝藏,爬虫就是在挖取宝藏。


 我们爬虫要用到的requests请求库:

安装:

pip3 install requests

 每次使用的时候在代码前面加上

import requests

 

 举例:

一、爬“校花网”

为了增加我们学习的动力,我们先来爬点视频。

找到校花网的主页url:

http://www.xiaohuar.com/list-3-0.html

找到每个视频详情页的url(通过谷歌浏览器检查的方式(.*?)使用了正则表达式):

<div class="items"><a class="imglink" href="(.*?)"

找到视频的源地址的url:

<source src="(.*?)">

 

三个函数:

发送请求:

def get_page(url):
    response = requests.get(url)
    return response

解析数据:

import re
def parse_index(html):
    # findall匹配所有
    # re.findall('正则匹配规则','匹配文本'.'匹配模式')
    # re.S:对全部文本进行搜索匹配
    detail_urls = re.findall('<div class="items"><a class="imglink" href="(.*?)"', html, re.S)
    return detail_urls

# 解析详情页
def parse_detail(html):
    movie_url = re.findall('<source src="(.*?)">', html, re.S)
    if movie_url:
        return movie_url[0]

保存数据:

import uuid
def save_video(content):
    with open(f'{uuid.uuid4()}.mp4','wb') as f:
        f.write(content)
        print('视频下载完毕...请客人观赏!!!')

 

附上所有代码:

import requests

# 1 发送请求
def get_page(url):
    response = requests.get(url)
    return response

# 2 解析数据
import re
def parse_index(html):
    # findall匹配所有
    # re.findall('正则匹配规则','匹配文本'.'匹配模式')
    # re.S:对全部文本进行搜索匹配
    detail_urls = re.findall('<div class="items"><a class="imglink" href="(.*?)"', html, re.S)
    return detail_urls
# 解析详情页
def parse_detail(html):
    movie_url = re.findall('<source src="(.*?)">', html, re.S)
    if movie_url:
        return movie_url[0]

# 3 保存数据
import uuid
def save_video(content):
    with open(f'{uuid.uuid4()}.mp4','wb') as f:
        f.write(content)
        print('视频下载完毕...请客人观赏!!!')

# 测试用例
if __name__ == '__main__':
    for line in range(6):
        url = f'http://www.xiaohuar.com/list-3-{line}.html'

        # 发送请求
        response = get_page(url)

        # 解析主页页面
        detail_urls = parse_index(response.text)

        # 循环遍历详情页url
        for detail_urls in detail_urls:
            # 往每一个详情页发送请求
            detail_res = get_page(detail_urls)

            # 解析详情页获取视频url
            movie_url = parse_detail(detail_res.text)

            # 判断视频url存在则打印
            if movie_url:
                print(movie_url)

                # 往视频url发送请求获取视频二进制流
                movie_res = get_page(movie_url)

                # 把视频的二进制流传给save_video函数去保存到本地
                save_video(movie_res.content)

 


 

二、自动登录github

1 访问登录界面获取token随机字符串
请求url:
https://github.com/login
请求方式:
GET
请求头:
COOKIES
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
2 解析并提取token字符串
# 正则
<input type="hidden" name="authenticity_token" value="(.*?)"
import requests
import re
login_url = 'https://github.com/login'
login_header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
login_res = requests.get(url=login_url, headers=login_header)


# 解析提取token字符串
authenticity_token = re.findall(
    '<input type="hidden" name="authenticity_token" value="(.*?)"',
    login_res.text,
    re.S
)[0]
print(authenticity_token)

# 获取login页面的cookies信息
login_cookies = login_res.cookies.get_dict()
2 开始登录github
POST请求自动登录github:
请求方式:
POST
请求URL:
https://github.com/session
请求头:
Cookie
User-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
请求体:
commit: Sign in
utf8: ✓
authenticity_token: FbwwBOSWi3OrjoT7vmkyVnCruAAMEYkuT4AZcH9U6prQGQh5LLO9j0E8CeCUiP94oyQ/RwReQ81fDwfxWUa+sw==
login: ********
password: *******
webauthn-support: supported
# 请求url
session_url = 'https://github.com/session'
# 请求头信息
session_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
# 请求体信息
form_data = {
    "commit": "Sign in",
    "utf8": "",
    "authenticity_token": authenticity_token,
    "login": "*******",
    "password": "********",
    "webauthn-support": "supported"
}

session_res = requests.post(
    url=session_url,
    headers=session_headers,
    cookies=login_cookies,
    data=form_data
)

with open('github.html', 'w', encoding='utf-8') as f:
    f.write(session_res.text)

其中******改成自己的github账号和密码,请求头信息和请求体信息通过浏览器的检查方式查看。

 

附上所有代码:

import requests
import re
login_url = 'https://github.com/login'
login_header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
login_res = requests.get(url=login_url, headers=login_header)


# 解析提取token字符串
authenticity_token = re.findall(
    '<input type="hidden" name="authenticity_token" value="(.*?)"',
    login_res.text,
    re.S
)[0]
print(authenticity_token)

# 获取login页面的cookies信息
login_cookies = login_res.cookies.get_dict()

# 请求url
session_url = 'https://github.com/session'

# 请求头信息
session_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
# 请求体信息
form_data = {
    "commit": "Sign in",
    "utf8": "",
    "authenticity_token": authenticity_token,
    "login": "*******",
    "password": "*******",
    "webauthn-support": "supported"
}

session_res = requests.post(
    url=session_url,
    headers=session_headers,
    cookies=login_cookies,
    data=form_data
)

with open('github.html', 'w', encoding='utf-8') as f:
    f.write(session_res.text)

转载于:https://www.cnblogs.com/yjg6/p/11114036.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值