前言

原创文章,转载引用务必注明链接。水平有限,如有疏漏,欢迎指正。

之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频。

缴纳99元保证金即可参与,只要完成3次作业和参与直播,提交学习笔记,就可以退还保证金,还可获得《Python全栈开发实战》及内部教材书籍,视频课程、定制文化衫等作为奖励。另外,还会有1对1的导师逐行批改你的代码、讲师3次直播答疑,还有班主任组队小伙伴共同学习。

好像打了一次广告,麻烦luffy的工作人员看到给我打个赏。网站做的还可以,7月3号正式开课,现在先看的录播,讲的内容还行,但是看视频嘛,有时候会有闲扯。

本文环境:Windows_7_64 bit, Visual Studio Code + Code Runner(Ctrl + Alt + N), Python 3.6,

1、章节一 初始爬虫笔记

  • r.encoding = r.apparent_encoding 设置编码为网页指定的编码,防止乱码(主要utf-8、gbk等)

        >>> import requests
    >>> r = requests.get('http://baidu.com')
    >>> r.apparent_encoding
    'ascii'
    >>> r = requests.get('http://www.baidu.com')
    >>> r.apparent_encoding
    'utf-8'
  • from xx import xxx 与import xx的区别

    >>> from requests_html import HTMLSession
    >>> session = HTMLSession()
    # 或者
    >>> from requests_html import HTML as XXX
    >>> doc = """<a href='https://httpbin.org'>"""
    >>> html = HTML(html=doc)

    直接使用模块内的功能(?),否则就是requests_html.HTML()

  • BeautifulSoup(r.txet, 'html.parser') # lxml快但不内置, 需要手动pip安装

  • 出现None时回看数据,必要时跳过

    for li in li_list:
    h3 = li.find(name='h3')
    if not h3:
    continue
    print(ht.text)
  • BeautifulSoup find()查找第一个获取包含所有内容的div,返回对象;然后再次find_all()查找每个内容的最小个体,返回列表

  • 借助chrome的调试控制台,主要是network、element等,选择element,往上找到带id的。

  • r.find()和r.find_all()都返回列表,前者只有一个元素

以上为爬取汽车之家,以下为登录抽屉点赞:

  • bugmenot.com查看共享账号

  • 首先随便输入信息,在f12中Network中看到Login过程

  • F12选择左上角关闭DeviceBar可以扩大显示空间

  • 直接看json()显示为none,重新看text发现启用反爬虫,设置User-Agent OK。一般需要的就是Hots防盗链,User-Agent防爬虫,先啥都不加

  • 获取cookies:r.cookies.get_dict()

  • 对于https,fiddler需要安装证书解密,直观。F12也很强大,就是乱

  • 有些网站是初次未登录时获取cookies,登陆后对该cookies授权

  • 对于form传递,有csrf或者token的,先访问页面获取token,然后带着token传递账密

  • s.attrs显示属性,返回字典。s.get('value')取某个属性的值

  • ☆使用selector时有时候是全局,比如找在info里面用复制的selector找不到,res里可以找到。此外,登录前登陆后复制的selector可能不同,主要是前体

  • 登录github时,获取页面text报错:

    UnicodeEncodeError: 'gbk' codec can't encode character '\u21b5' in position 10332: illegal multibyte sequence

    考虑非法字符串无法转换,对string重编码:r.text.decode('utf-8')

  • 要会web才学好爬虫

  • network -xhr请求-ajax请求

  • Preserve log,Disable cache

  • 重定向保存,update cookie, allow_rediect = False

    重定向 302 Location响应头:r3.headers['Location']

  • 初起学习尽量不要用session,先手动模拟,搞透调通再用自动化完成

2、爬虫作业 登录github获取个人信息

课上讲了一部分,登录方式如下,这里我们用session自动管理cookies:

# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
# from lxml import etree
from requests_html import HTML # session = HTMLSession()
r = requests.session() username = 'username'
passwd = 'passwd'
s1 = BeautifulSoup(r.get('https://github.com/login').text, 'html.parser')
# print(s1)
token = s1.find(name='input', attrs={'name': 'authenticity_token'}).get('value')
# print(token) FormData = {
'commit': 'Sign in',
'utf8': '✓',
'authenticity_token': token,
'login': username,
'password': passwd
} r.post('https://github.com/session', data=FormData)

此时已经登录github。访问个人主页获取信息:

res = BeautifulSoup(r.get('https://github.com/' + username).text, 'html.parser')
info = res.select('#js-pjax-container > div > div.h-card.col-3.float-left.pr-3')[0] avatar_src = info.find('img').get('src')
name = info.find(name='span', attrs={'itemprop': 'name'}).text
additionalName = info.find('span', attrs={'itemprop': 'additionalName'}).text print('name is {0}, additionalName is {1}, avatar is {2}'.format(name, additionalName, avatar_src))

直接是值的话就是.text,否则就是get('value')获取。我们使用vsc配合code runner可以看到运行时间,还有其他功能,非常好用。获取大头像地址去掉?s=64

输出字符乱码的解决

关于输出字符编码乱码,发现用VSC有,IDLE没有,和IDE有关系。建议看以下文章:

以上是基础,参考

在visual studio code 中配置python以及解决中文乱码问题,添加以下代码(Windows/Linux测试通过):

# -*-coding:utf-8 -*-
import io
import sys
#改变标准输出的默认编码
sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')

采用修改环境变量的方法可以一劳永逸,PYTHONIOENCODING=UTF8,Windows可以借助Rapidee,linux则export PYTHONIOENCODING=UTF8即可临时实现,具体可以修改.bashrc文件。

参考链接

路飞学城Python爬虫课第一章笔记的更多相关文章

  1. 路飞学城-Python爬虫集训-第一章

    自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...

  2. 路飞学城-Python爬虫集训-第二章

    本次爬虫集训的第二次作业是web微信. 先贴一下任务: 作业中使用到了Flask. Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模 ...

  3. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...

  4. 路飞学城—Python爬虫实战密训班 第二章

    路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...

  5. 路飞学城-Python爬虫集训-第三章

    这个爬虫集训课第三章的作业讲得是Scrapy 课程主要是使用Scrapy + Redis实现分布式爬虫 惯例贴一下作业: Python爬虫可以使用Requests库来进行简单爬虫的编写,但是Reque ...

  6. 路飞学城-Python开发-第三章

    # 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...

  7. 路飞学城-Python开发-第一章

    # 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...

  8. 路飞学城-Python开发集训-第1章

    学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...

  9. 路飞学城-Python开发集训-第3章

    学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...

随机推荐

  1. 【bzoj2127】happiness 网络流最小割

    题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...

  2. NodeJS npm 包装包失败的解决方案

    这个也是网上搜的,亲自试过,非常好用! 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set reg ...

  3. chrome浏览器无法安装非应用商店插件的解决办法

    不久前,安装了一个非chrome应用商店的第三方应用,今天突然发现无法使用,打开chrome的扩展程序后,发现该插件以及被禁用,在网上查找了解决方法,设置“开发者模式”,修改了chrome的参数,仍然 ...

  4. windows系统——U 盘损坏修复

    u盘损坏怎么修复 1.打开控制面板——管理工具——计算机管理——存储——磁盘管理——右击“磁盘1”——点击“初始化磁盘”——“确定”——初始化完毕后,U盘为“联机”状态. 2.在右边空白处“新建磁盘分 ...

  5. RTSP会话基本流程

    RTSP会话基本流程 RTSP交互流程: C表示RTSP客户端,S表示RTSP服务端 ① C->S: OPTION request //询问S有哪些方法可用 S->C: OPTION re ...

  6. 刷题总结——次小生成树(bzoj1977 最小生成树+倍增)

    题目: Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C ...

  7. CentOS7安装Elasticsearch5.5.3

    一.准备 安装Java环境,elasticsearch推荐安装java1.8.0_131或更高的版本,安装教程CentOS7安装JDK1.8 二.安装 CentOS下可以选择.tar.gz或rpm方式 ...

  8. 输出前k大的数

    总时间限制: 10000ms单个测试点时间限制:1000ms内存限制:65536kB(noi) 描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大 ...

  9. POJ1595 Prime Cuts

    Prime Cuts Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11961   Accepted: 4553 Descr ...

  10. 组合模式Composite Pattern(转)

    什么是组合模式呢?简单来说组合模式就是将对象合成树形结构以表示“部分整体”的层次结构,组合模式使用户对单个对象和组合对象使用具有一致性. 组合模式(Composite Pattern)有时候又叫部分- ...