python爬虫学习笔记

作者 : 郭然 本文共6447个字,预计阅读时间需要17分钟 发布时间: 2020-08-16 共336人阅读

一直没时间学习,终于抽时间学习学习,坑还是很多的

准备

软件准备

1.python 3.x

2.pycharm——最强IDE?

python库准备

1.requests 干啥啥必备,指名道姓urllib你个辣鸡

官方文档

2.bs4 注:虽然库是Beautiful Soup ,但是鬼知道官方整个bs4还得from import干什么

官方文档

3.lxml 虽说python内置的解析器已经凑合能用了,但这是优良传统

注:这是一个神奇的库,只需安装,不需引用

4.用不到的selenium(js动态加载必备)

5.tqdm 用于显示进度条,美化用

pip install requests 
pip install bs4 
pip install lxml

当然还可以用pycharm的库管理器安装,记得提前换个清华/阿里源

ps:官方文档会让你迷茫的时候,看不懂一帮憨憨讲什么的时候,恍然大悟

知识

感觉没什么说的

url——域名

<xxx></xxx>——标签

<xxx>看我</xxx>——看我是元素

<example shuxing="shuxing"></example>——shuxing="shuxing"便是属性,用于爬虫确定标签位置,毕竟谁也不可能就那么一个标签

某些网站会用些实体字符就是形如 &example这种

w3school提供手册

查查更健康

实践

下载网页

这个比较简单,只需要requests就可以实现

比如先爬一下https://www.52pojie.cn/的首页

网站还是比较友好的,没有对新手太过苛刻,但是呢,爬虫也是一样,没事别老整什么多发线程

你以为你cc攻击呐,鸡眼了,有你好果子吃[doge]

import requests
html = requests.get('https://www.52pojie.cn')
print(html.text)

这里注意print时html后面需要加.text输出源码,不加会输出什么呢?可以试一试

不加是状态码小声BB

然后,你就得到了一大堆,有什么用呢,没什么用

这时一个舒服的筛选工具就很必要了

筛选

由于上面52pojie.cn的首页四块class都相同,不便于区分,不爬了快跑(不到啊)

https://www.52pojie.cn/forum.php?mod=guide&view=hot这看起来是个软柿子

F12看结构

以下是我个人经验

1.必须找到你所要内容的上一级利用find

2.然后find_all你所找的标签

3.用 元素.string 得到元素

用 元素.get(‘属性’)得到属性

打个比方:

比如你想知道法外狂徒张三所住小区的所有门上的猫眼长什么样

你必须先找到小区

然后再筛选出小区中的单元门

然后再get到猫眼

(糟糕的比喻)

根据以上方法

0.网页下载

import requests
from bs4 import BeautifulSoup
html = requests.get('https://www.52pojie.cn/forum.php?mod=guide&view=hot')

0.5使用bs解析

soup = BeautifulSoup(html.text, 'lxml')

1.div标签 确定

属性 有 id 和 class 可以二选一,也可以都使用

注意:BeautifulSoup中class为class_ 说是为了避免重复,咱也不知道啊

import requests
from bs4 import BeautifulSoup
html = requests.get('https://www.52pojie.cn/forum.php?mod=guide&view=hot')
sever = 'https://www.52pojie.cn/'
soup = BeautifulSoup(html.text, 'lxml')
get = soup.find('div', class_='tl bm bmw')

2.获取a标签

import requests
from bs4 import BeautifulSoup
html = requests.get('https://www.52pojie.cn/forum.php?mod=guide&view=hot')
sever = 'https://www.52pojie.cn/'
soup = BeautifulSoup(html.text, 'lxml')
get = soup.find('div', class_='tl bm bmw')
geta = get.find_all('a', class_='xst')

3.获取元素及href属性

这里明确一件事情
.find找到的默认是第一个,是一个整体,所以要做到唯一
.find_all找到的是所有匹配的,是一个list,所以我们应用for循环,逐个输出

for x in geta:
    print(x.string)
    print(sever+x.get('href'))

注:这里的sever就是https://www.52pojie.cn/
原因是因为站内href都是去头的,就是个本地访问,可是服务器又不在我们电脑,补全是必须的
这里便是输出结果

电视盒子tv版本ktv软件无需会员
https://www.52pojie.cn/thread-1220759-1-1.html
WPS Office v12.7.1直装高级版
https://www.52pojie.cn/thread-1220940-1-1.html
玩转Github各种插件和脚本【效率提升200%】
https://www.52pojie.cn/thread-1221353-1-1.html
某盒子破解,仅分析破解思路
https://www.52pojie.cn/thread-1218307-1-1.html
【CN911】编码手册 v1.0  自定义手册
https://www.52pojie.cn/thread-1218755-1-1.html
【转】洛雪音乐助手 v1.0.0 beta 3 音乐下载神器Windows+Mac+Linux
https://www.52pojie.cn/thread-1219799-1-1.html
【steam价值¥280新游】《牧场物语:重聚矿石镇》中文免安装版
https://www.52pojie.cn/thread-1219718-1-1.html
发个某包买的会会(带素材教程和模板)
https://www.52pojie.cn/thread-1220974-1-1.html
【度盘】彩虹岛7月单机版,双刀技改、宝石之心、副本修复等
https://www.52pojie.cn/thread-1219292-1-1.html
【极限竞速:地平线4  v1.42.799.2】【免安装绿色中文版】【整合700辆车存档】网盘
https://www.52pojie.cn/thread-1219604-1-1.html
万兴全能格式转换器 v12.0.1.2 免激活绿色版
https://www.52pojie.cn/thread-1220924-1-1.html
红色警戒:尤里的复仇 经典战争游戏PC移植版 【手机版】 推荐喜欢的朋友试试
https://www.52pojie.cn/thread-1218271-1-1.html
还记得诺顿吗?Norton Utilities Premium(诺顿系统优化软件)官方中文版V17.0.3.658
https://www.52pojie.cn/thread-1219632-1-1.html
国家计算机考试题库软件
https://www.52pojie.cn/thread-1215779-1-1.html
【小男孩证件照制作】支持500多个证件照免费制作,一键换背景色自动排版自动美颜
https://www.52pojie.cn/thread-1219295-1-1.html
虚拟机VM15最高版本+win7 vm文件 小白安装打开即可
https://www.52pojie.cn/thread-1218813-1-1.html
百度链接免登陆高速下载!
https://www.52pojie.cn/thread-1214687-1-1.html
微信PC版 v2.9.5.53 无限多开&消息防撤回  绿色版(带撤回提示)(7.16更新)
https://www.52pojie.cn/thread-1220826-1-1.html
木马程序借助“游民星空”等下载站再次大肆传播  可云控投放恶意模块
https://www.52pojie.cn/thread-1216391-1-1.html
蚂蚁远程 1.1.0.0
https://www.52pojie.cn/thread-1219781-1-1.html
usb3.0驱动及nvme补丁注入工具(6代及以上iu装win7的解决方式)
https://www.52pojie.cn/thread-1220690-1-1.html
Office Tab Enterprise v14.00.0
https://www.52pojie.cn/thread-1220396-1-1.html
M3U8批量下载器 V1.4.5【7月9日更新】
https://www.52pojie.cn/thread-1216473-1-1.html
桌面整理软件DeskGo_2_9_20254_127_lite独立提取版
https://www.52pojie.cn/thread-1216677-1-1.html
【IDM神操作】你要的无损Music资源这样搞定!【2020.7.13 更新】
https://www.52pojie.cn/thread-1217156-1-1.html
端口查看器
https://www.52pojie.cn/thread-1219565-1-1.html
深度一键软件安装器2020.07.10
https://www.52pojie.cn/thread-1217401-1-1.html
【开放注册公告】吾爱破解论坛2020年7月21日暑假开放注册公告
https://www.52pojie.cn/thread-1216734-1-1.html
百度链接IDM小工具V1.7(附带源码)
https://www.52pojie.cn/thread-1216514-1-1.html
WinRAR 5.91简体中文 德国官网版 新鲜出炉~
https://www.52pojie.cn/thread-1214424-1-1.html
鉴于篇幅,省略一大堆

是不是有点儿感觉了?

多页爬取+保存为txt

单页爬取已经会了,多页还会远吗?不过是整合代码罢了

https://www.52pojie.cn/forum.php?mod=guide&view=hot&page=2

网站还是很适合练手的

明晃晃的page=2

一共就四页,所以从一加到四就好啦

自己想就好啦

然后是保存了

python的文件读写特别唬人,叫什么IO编程???

名字劝退啊

我们只需要记住这一行就能糊弄过去

with open('文件名.txt', 'a',encoding='UTF-8') as 随便瞎起个名:

详细地自行学习python的io吧

然后既然我们能print,我们就也能write

直接一键剪切就完事

import requests
from bs4 import BeautifulSoup
i = 1
add = 'page=' + str(i)
while i <= 4:
    i = i +1
    html = requests.get('https://www.52pojie.cn/forum.php?mod=guide&view=hot'+add)
    sever = 'https://www.52pojie.cn/'
    soup = BeautifulSoup(html.text, 'lxml')
    get = soup.find('div', class_='tl bm bmw')
    geta = get.find_all('a', class_='xst')
    for x in geta:
        with open('热门.txt','a',encoding='UTF-8') as file:
            file.write(x.string)
            file.write('\n')
            file.write(sever+x.get('href'))
            file.write('\n')

‘\n’这个是换行符吧~,要不然会挤成一行

来自菜鸟教程的对open模式的解析

模式 描述
t 文本模式 (默认)。
x 写模式,新建一个文件,如果该文件已存在则会报错。
b 二进制模式。
+ 打开一个文件进行更新(可读可写)。
U 通用换行模式(不推荐)。
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
模式 r r+ w w+ a a+
+ + + +
+ + + + +
创建 + + + +
覆盖 + +
指针在开始 + + + +
指针在结尾 + +

加个进度条

看它在那儿运行鬼知道跑成什么样了

tqdm搞起来

from tqdm import tqdm

tqdm用于哪里呢?

好像用于for的迭代循环

所以前面的while好像就不香了,改吧改吧就能用了

import requests
from bs4 import BeautifulSoup
from tqdm import tqdm
for i in tqdm(range(1,5)):
    add = '&page=' + str(i)
    html = requests.get('https://www.52pojie.cn/forum.php?mod=guide&view=hot'+add)
    sever = 'https://www.52pojie.cn/'
    soup = BeautifulSoup(html.text, 'lxml')
    get = soup.find('div', class_='tl bm bmw')
    geta = get.find_all('a', class_='xst')
    for x in geta:
        with open('热门.txt','a',encoding='UTF-8') as file:
            file.write(x.string)
            file.write('\n')
            file.write(sever+x.get('href'))
            file.write('\n')

在目录下生成 热门.txt 目的达到

全文终

赞赏

微信赞赏支付宝赞赏

VIP部落提供编程技术、教育培训、优惠购物以及各类软件和网站源码、模板等资源下载。
VIP部落 » python爬虫学习笔记

常见问题FAQ

提供最优质的资源集合

立即查看 了解详情