博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
路飞学城-爬虫集训营-第一章
阅读量:5294 次
发布时间:2019-06-14

本文共 4300 字,大约阅读时间需要 14 分钟。

 

学习心得:

1.课程讲的十分详细,对初学者来说是个不错的选择
2.wusir直播时讲拉钩登陆讲了很多注意项,让自己也发现了自己的错误点
3.alex鸡汤太少了!!alex鸡汤太少了!!alex鸡汤太少了!!alex鸡汤太少了!!

4.作为一个爬虫初学者来说除了扎实得基础外最主要得是学会如何使用爬虫库,集训营得课程里wusir讲爬虫库讲得十分详细并且通过实例来让我们更加的深入,这样对于初学者来说是个很好的。能让初学者少踩很多坑,也让接触过爬虫同学有了更加深入得认知,对于可能会出错得地方进行总结。拿拉钩跟github来说网页反爬得那个token可能很多初学者不懂得如何获取跟写入,在直播里wusir用拉钩做了例子详细教我们分析如何获取跟使用让我们受益良多

第三方库---requests
  1.安装
    pip install requests
    注意使用python3时在linux系统下可能是 pip3
  2.requests部分常用参数
    1.url 必填 需要访问的网址
    2.params 选填 发送请求的参数,有的URL已经拼接好不需要重复发送(GET请求)
    3.data 选填 发送请求的参数,有的URL已经拼接好不需要重复发送(POST请求)
    4.headers 选填 请求头,有些网站必须验证请求头比如USER-AGENT
    5.cookies 选填 用户数据 有的网站会验证是否登陆可以使用cookie
    补充:
      1.post请求里data为 http请求里的 body /r/n/r/n body
  3.发送请求
    1.get请求
      response = requests.get(url='www.baidu.com',params={'例子':'例子'},headers={'host':'www.baidu.com')#发送请求
      response.encoding = 'utf-8'#设定编码
      response.text #返回文本
    2.post请求
      response = requests.post(url='www.baidu.com',data={'例子':'例子'},headers={'host':'www.baidu.com')
      ....
第三方库---beautifulsoup
  1.安装
    pip install bs4
  2.分析网页
    soup = BeautifulSoup(html,'lxml')#html为请求后的text内容(html源码),lxml为解析库
    soup.find(name='标签名',attrs={'id':'values'})#name标签名,attrs标签属性
实例:模拟登陆github
#-*- coding: utf-8 -*-
# Author:w k

'''

1.访问登陆页面并且分析得到authenticity_token
2.把附带刚刚authenticity_token的cookie和账号密码参数POST请求
3.请求后获取登陆的用户名~
4.访问用户名的个人空间并且获取信息
'''

import requests
from bs4 import BeautifulSoup
from config import *

def login(username, password, token, cookies):
doc = BeautifulSoup(token, 'lxml')
token = doc.find(name='input', attrs={'name': 'authenticity_token'}).get('value')
data = {
"commit": "Sign+in",
"utf8": "✓",
"authenticity_token": token,
"login": username,
"password": password,
}
result = requests.post(url=LOGIN_URL, data=data, headers=HEADERS, cookies=cookies)
if result.status_code == 200 or 302:
# 如果返回的状态吗是200或者302则代表登陆成功,接着分析网页获取当前登陆的用户名返回
status = BeautifulSoup(result.text, 'lxml')
user = status.find(name='strong', attrs={"class": "css-truncate-target"}).text
return user, result.cookies.get_dict()
return None

def getPage(url, cookie=None, need_cookie=False):
'''
获取页面html代码,有的网页需要登陆所以可以选择是否传入cookie
need_cookie可以在获取后返回cookie
:param url:
:param cookie:
:param need_cookie:
:return:
'''
try:
if cookie:
response = requests.get(url, cookies=cookie, headers=HEADERS)
else:
response = requests.get(url, headers=HEADERS)
if response.status_code == 200:
if need_cookie:
return response.text, response.cookies.get_dict()
return response.text
return None
except Exception as E:
print('请求失败~')
return None

def parseInformation(html):

'''
使用try可以防止有的用户没有填写那处的资料出错
:param html:
:return:
'''
doc = BeautifulSoup(html, 'lxml')
nickname = doc.find(name='span', attrs={'itemprop': 'name'}).string
username = doc.find(name='span', attrs={'itemprop': 'additionalName'}).string

try:

bio = doc.find(name='div', attrs={'class': 'd-inline-block mb-3 js-user-profile-bio-contents'}).div.string
except AttributeError:
bio = None

try:

company = doc.find(name='span', attrs={'class': 'p-org'}).div.string
except AttributeError:
company = None

try:

location = doc.find(name='span', attrs={'class': 'p-label'}).string
except AttributeError:
location = None

try:

email = doc.find(name='a', attrs={'class': 'u-email'}).string
except AttributeError:
email = None

try:

url = doc.find(name='a', attrs={'class': 'u-url'}).string
except AttributeError:
url = None

Information = '''=====用户个人信息====

昵称:{nickname}
用户名:{username}
bio:{bio}
公司:{company}
位置:{location}
邮箱:{email}
网址:{url}
'''.format(nickname=nickname, username=username, bio=bio, company=company, location=location, email=email, url=url)
return Information

def main(user,pwd):

'''
程序入口:
先获取登陆token,然后传入账号密码和cookie,token登陆后访问用户主页获取用户资料
:return:
'''
try:
result, cookie = getPage(url=TOKEN_URL, need_cookie=True)
except Exception:
print('无法获得Token或者Cookie')
exit(-1)
result = login(username=user, password=pwd, token=result, cookies=cookie)
if result:
# result[0]为用户名,[1]为cookie
user_url = 'https://github.com/' + result[0]
html = getPage(url=user_url, cookie=result[1])
if html:
information = parseInformation(html)
print(information)
else:
print('无法解析个人空间页面请重试')
exit(-1)
else:
print('登陆出错,请检查用户名或者密码或者网络再重新尝试~')
exit(-1)

if __name__ == '__main__':

main(user,pwd)

 

转载于:https://www.cnblogs.com/flower-poison/p/9298781.html

你可能感兴趣的文章
select下拉二级联动
查看>>
iOS UI控件5-UIPickerView
查看>>
深入Java虚拟机读书笔记第三章安全
查看>>
IO流 总结一
查看>>
素数筛选法
查看>>
php连接postgresql数据库
查看>>
Visual studio之C# 调用系统软键盘(外部"osk.exe")
查看>>
hdu 4506(数学,循环节+快速幂)
查看>>
Spring mvc 教程
查看>>
CentOS DesktopEntry
查看>>
基于python语言的自动化邮件发送总结
查看>>
TSQL点滴
查看>>
【转】oracle case ,loop,while ,for简单实例
查看>>
Linux 操作系统启动流程
查看>>
将Express生成器下的pug修改为html
查看>>
[LeetCode]Spiral Matrix 54
查看>>
asp.net session mode 几种状态 (转)
查看>>
nodejs中异步
查看>>
疯狂使用 leancloud (投稿文章)
查看>>
SQL Server ON条件和WHERE条件
查看>>