E:一只爬虫 ¶
约 1528 个字 13 行代码 预计阅读时间 6 分钟
安装库 ¶
本次项目共用到以下库
import json
import re
import time
from bs4 import BeautifulSoup
import request
import openpyxl
Task python¶
在寒假中预习了一点点 python 的基础语法,写过两三个有意思的小项目,但操作并不熟练,而爬虫需要对 python 掌握比较熟练,
所以在第一晚(3.17 晚mo
平台,在之前笔记的基础上,整理了一份 python 语法小册子(附录 : ./python 笔记 .pd)
并制作了一个任务完成学习路径大纲
Task1 request¶
首先,我按照报名表的推荐先看了三个阅读文档
telnet¶
(27 条消息 ) telnet 使用教程(新手篇)及问题集锦 _ 冰夏之夜影的博客 -CSDN 博客
(27 条消息 ) Windows 10 操作系统上使用 telnet 命令(图文)_windows telnet 命令 _ 沉默的墨小鱼的博客 -CSDN 博客
教你用 telnet 命令检测端口状态,所有端口映射问题,一招解决 _ 哔哩哔哩 _bilibili
一些常见的术语 ¶
- URI: A system for identifying pieces of information on the network.
- HTTP Methods: The protocol currently contains 8 methods for requesting a URI: , , , , , , , . In this article we focused on the most commonly used one:
OPTIONS``GET``HEAD``POST``PUT``DELETE``TRACE``CONNECT``GET
- HTTP Headers: The headers are additional data sent by the user agent to give more context about the transaction going on between the client and the server. Some of them will help the server reply in the most appropriate way.
http 协议 ¶
URL 与 URI,有联系有区别? - 知乎 (zhihu.com)
【秒懂】https 协议原理 _ 哔哩哔哩 _bilibili
【03- 理论课】什么是 HTTP 请求和响应?_ 哔哩哔哩 _bilibili
- 公钥加密,私钥解密
- 私钥签名
Task1-bonus 模拟登陆 ¶
我之前对前端的了解并不多,所以这次也学到了很多知识
up 主 Genji 的公开课算是小小白了解一个大概的挺好的课程,学习了最基础的课程
【00- 先导课】爆肝两个月!拜托三连了!这绝对是全 B 站最用心(没有之一)的 Python+ 爬虫公开课程,从入门到(不)入狱 !_ 哔哩哔哩 _bilibili
Requests 库 ¶
!!!!python 中 requests 库使用方法详解 - 知乎 (zhihu.com)
- headers
最全常用 User-Agent - 腾讯云开发者社区 - 腾讯云 (tencent.com)
(27 条消息 ) 怎么查看自己浏览器的 User-Agent_ 查看 user-agent_S1901 的博客 -CSDN 博客
(27 条消息 ) python 爬虫之 爬取网页并保存(简单基础知识)_ 爬取网页 head 部分并保存到 _ 黎明之道的博客 -CSDN 博客
- 状态码
遇到的问题 ¶
-
如何使用 F12 开发者工具查看想要的数据:包括网络,元素使用方法:查了好多博客,大概学会了使用方法
-
字符串生成字典:利用 json 函数 Python 如何将字符串转为字典 - VincentZhu - 博客园 (cnblogs.com)
- request 抛异常: 学习 try-except 异常处理方法
- 如何检测输入的是否为正确网址
- 想法:是否包含 com cn www ; 提前验证是否可以登录; 用正则表达式匹配 ( 但不知道有的网址或许没有 com 或者 www 怎么处理 )
-
request 中 text() 输出的格式不一:有的很整齐有换行,有的是一整行
-
编码格式不对:
encodeing = 'UTF-8'
beautiful soup 库 ¶
BeautifulSoup 这个库
http://beautifulsoup.readthedocs.org/zh_CN/latest
(1 封私信 ) bearer token 到底是什么? - 知乎 (zhihu.com)
Scrapy 框架 ¶
学习路径 ¶
Scrapy 入门教程 | 菜鸟教程 (runoob.com)
01.Scrapy 框架简介 _ 哔哩哔哩 _bilibili
反爬虫手段 ¶
- ip
- 登录
- 验证码
反反爬手段 ¶
- 伪装 IP 地址的方法:
- 使用代理服务器:代理服务器可以将你的请求转发到目标网站,从而隐藏你的真实 IP 地址。你可以通过购买代理服务器或者使用免费的代理服务器来实现伪装 IP 地址。
- 使用 TOR 网络:TOR 网络是一种匿名网络,可以隐藏你的 IP 地址,让你在互联网上匿名浏览。你可以通过下载 TOR 浏览器来使用 TOR 网络,从而实现伪装 IP 地址。
-
修改 Hosts 文件:你可以手动修改 Hosts 文件,将目标网站的域名解析到一个不存在的 IP 地址上,从而达到伪装 IP 地址的效果。
-
获取免费的代理
国内高匿 HTTP 免费代理 IP - 快代理 (kuaidaili.com)
(27 条消息 ) 【爬虫进阶】常见的反爬手段和解决方法(建议收藏)_ 总结反爬虫的目的和常用手段 _ZSYL 的博客 -CSDN 博客
遇到的问题 ¶
-
虚拟环境的安装
-
scrapy 文件下不同文件间的引用问题:需要设置根目录
from demospider.items import MovieItem
-
类型错误导致报错,
-
导入库时候:先导入标准库,再导入三方库,再导入自定义
-
子类的重写要和父类长得一样就不会报错
-
钩子方法 -》函数回调 callback
-
管道配置:数字小的先执行,数字大的后执行
def open_spider ->开始需要干什么
def close_spider -> 结束需要做什么
def process_item -> 拿到每条数据做什么
self.parse()
和self.parse
前者是执行 后者是地址 !!!! 不要搞反了(查了 20min 的 bug
!!!!!!!!!!!!!!!!!!!!!!!!!
- 中间插了个广告,而浏览器内置的广告拦截器会让这个地方网址直接加载不出来,爬的时候导致报错
解决方案:判定读到的 URL 中是否包含 BV 号,如果没有就跳过
url
合并问题,用`urljoin
函数
urllib.parse — Parse URLs into components — Python 3.11.2 documentation
- 最后到了一个困扰了我很久的问题,就是页面分析的问题
页面的源代码和在 F12 中查看的元素中并不一样,可能是有
selector 的 css 选择器
关键词中文转换
视频分 p 问题
bvid、aid、cid 的问题
- 有没有更快捷的方法可以获取到准确的点赞投币数字呢
这个请求头的返回 包含了这个准确值
(27 条消息 ) Python 实现对 Bilibili 视频点赞等信息的爬取 _Samue1Zhu 的博客 -CSDN 博客
中文编码问题
urllib.parse — Parse URLs into components — Python 3.11.2 documentation
Crawled (200)
第一页和第二页网页元素不一样
(首页)#i_cecream > div > div:nth-child(2) > div.search-content--gray.search-content > div > div > div > div.video.i_wrapper.search-all-list > div.video-list.row > div:nth-child(1)
(非)#i_cecream > div > div:nth-child(2) > div.search-content--gray.search-content > div > div > div.video-list.row > div:nth-child(2)
bvid 获取