Python爬虫笔记

一、爬虫基础-Requests&BeautifulSoup

心得体会:爬虫基本原理就是模仿浏览器的行为,来爬取我们所需要的数据。利用Request向指定地址发送请求,并且获取其返回值。在爬取数据时,根据情况所需,添加请求头,或者COOKIE。有时候爬取的对象的防爬策略比较高深,需要根据浏览器的开发者工具中Network工具,来一步一步分析我们所爬取对象的数据与后台交互的过程,进一步的完善爬虫,更像一个浏览器在访问。

知识点总结:Requests的基本使用,需要掌握请求的类型('method'),请求地址('url'),请求时的所带数据('data', 'json', 'params'),数据的类型('POST', 'GET'),请求头('headers'),COOKIE。

import requests

r1 = requests.request(
    method='get',
    url='',
)

r2 = requests.request(
    method='post',
    url='',
)
Requests基本使用

BeautifulSoup是一个格式化工具,必须掌握最基本的标签查找,页面标签的内容提取。

代码演示:

from bs4 import BeautifulSoup
import requests

r = requests.request(
    method='get',
    url='https://github.com/login',
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
    },
)
r.encoding = r.apparent_encoding
key = BeautifulSoup(r.text, 'html.parser').find(
    name='input',
    attrs={
        'name': 'authenticity_token'
    },
).get('value')

r2 = requests.request(
    method='post',
    url='https://github.com/session',
    cookies=r.cookies,
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
    },
    data={
        'commit': 'Sign in',
        'utf8': '',
        'authenticity_token': key,
        'login': '[email protected]',
        'password': 'WaveCloud999',
    }
)
r3 = requests.request(
    method='get',
    url='https://github.com/WaveCloud592',
    cookies=r2.cookies,
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
    },
)
r3.encoding = r3.apparent_encoding
myinfo = BeautifulSoup(r3.text, 'html.parser')
# # 头像
img = myinfo.find(
    name='img',
    attrs={
        'alt': '@WaveCloud592'
    },
).get('src')
imgFile = requests.request(
    method='get',
    url=img
)
with open('img.png', 'wb') as f:
    f.write(imgFile.content)

# # 名字
name = myinfo.find(
    name='span',
    attrs={
        'itemprop': 'name'
    },
)
print('我的名字:%s' % name.text)

# # 用户名
name = myinfo.find(
    name='span',
    attrs={
        'itemprop': 'additionalName'
    },
)
print('我的用户名:%s' % name.text)

# # 我的签名
cont = myinfo.find(
    name='div',
    attrs={
        'class': 'js-user-profile-bio-contents'
    },
).find(
    name='div'
)
print('我的个性签名:%s' % cont.text)

# # 我的组织
group = myinfo.find(
    name='span',
    attrs={
        'class': 'p-org',
    },
).find(
    name='div'
)
print('我的组织:%s' % group.text)

# # 地区
diqu = myinfo.find(
    name='span',
    attrs={
        'class': 'p-label'
    },
)
print('地区:%s' % diqu.text)

# # 我的网址
url = myinfo.find(
    name='a',
    attrs={
        'class': 'u-url'
    },
)
print('我的网址:%s' % url.text)
登录GitHub并获取个人信息

猜你喜欢

转载自www.cnblogs.com/mainZyan/p/9263250.html