最近学习了点python爬虫的知识,今天给大家分享一个超级简单的案例,爬取四级词汇5000多个,包括单词,意思,音标和读音地址,很有意思,哈哈,话不多说,让我们开始吧 !


1.分析目标网站

四级必备词汇词汇_四级必备词汇单词表_四级必备词汇在线背单词_四级必备词汇免费背单词课程_爱词吧_金山词霸旗下背单词网站爱词霸吧背单词为您提供:四级必备词汇免费背单词课程,四级必备词汇词汇表,四级必备词汇单词表,四级必备词汇词汇下载。在这里,您可以轻轻松松高效的背单词,轻松了解各种单词记忆法,快速的记忆英语词汇。https://word.iciba.com/?action=courses&classid=11

首页一共有226课,每一个有20个单词

每一课有两页,一页有十个单词

点击第一课时,url会跳到

https://word.iciba.com/?action=words&class=11&course=1

点击第二课时,url会跳到

https://word.iciba.com/?action=words&class=11&course=2

点击第三课时,url会跳到

https://word.iciba.com/?action=words&class=11&course=3

以此类推,可以观察出,url中的course参数就是决定了当前是第几课

2.获取第一课单词

首先应该先确定要抓取的单词是否在网页的源代码中,如果在就简单了,注意,这里要点击查看网页源代码,而不是使用检查,因为检查的代码,可能使用了异步请求等技术,二次渲染了页面,所以这里有个坑,注意查看网页源代码

然后 Ctrl + F 搜索单词 comment ,发现网页中有,nice

那就直接写代码了

1. 导入requests库

import requests

2. 模拟headers,防止网站反爬

# 模拟请求头,防止反爬
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36"
}

3. 编写请求地址

url = "https://word.iciba.com/?action=words&class=11&course=1"

4. 使用requests库发起get请求,获取网页内容

resp = requests.get(url=url, headers=headers)
print(resp)

5. 查看响应,200没问题

<Response [200]>

6. 查看单词在网页的结构

7. 使用xpath解析HTML

from lxml import etree
# 解析HTML
tree = etree.HTML(resp.text)

我们发现两页其实就是第一个ul里装了10个单词,第二个ul里装了10个单词,这时可以使用循环替换ul[1],ul[2]来循环获取这两页的20个单词,代码如下:

# 解析HTML
tree = etree.HTML(resp.text)
# 因为有两页,循环大法
for i in range(1, 3):lis1 = tree.xpath(f"/html/body/div[2]/div[1]/form/div[1]/ul[{i}]/li")for j in lis1:# 解析单词word = j.xpath("./div[1]/span/text()")[0].strip()# 解析音标pronunciation = j.xpath("./div[2]/a/@id")[0].strip()# 解析意思symbols = j.xpath("./div[2]/strong/text()")[0].strip()# 解析链接mean = j.xpath("./div[3]/span/text()")[0].strip()print(word)print(pronunciation)print(symbols)print(mean)

结果如下,这里仅展示两个单词的数据

<Response [200]>
comment
https://res.iciba.com/resource/amp3/oxford/0/f4/ca/f4ca8f1ef7bd221775ba33cef5db6fb7.mp3
[ˈkɔment]
n. 评论,意见;体现,写照
plate
https://res.iciba.com/resource/amp3/oxford/0/5a/21/5a21852c383fc3c36cfba1f4e9f23dd3.mp3
[pleit]
vt. 电镀  n. 盘子,盆子; 金属...

3.使用循环获取所有课的单词

前面已经分析了,不同课的区别就是 course 参数在变化,这时候我们也实现了对其中一课单词的获取,所以现在只需要使用循环,动态设置i请求url模拟第几课的切换,然后发起请求,获取单词,就是上面写的内容了

import requests
from lxml import etree# 写爬虫得把网站结构摸透了,思路清晰
# 模拟请求头,防止反爬
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36"
}
# 循环网站的227课,每一个有两页,每一页有10个单词,共计4509个单词
for k in range(1, 227):print(f'{k - 1}页下载完成// {k - 1}/225')# 处理url,循环大法对每一课进行请求url = f"https://word.iciba.com/?action=words&class=11&course={k}"resp = requests.get(url=url, headers=headers)# 解析HTMLtree = etree.HTML(resp.text)# 因为有两页,循环大法for i in range(1, 3):lis1 = tree.xpath(f"/html/body/div[2]/div[1]/form/div[1]/ul[{i}]/li")for j in lis1:# 解析单词word = j.xpath("./div[1]/span/text()")[0].strip()# 解析音标pronunciation = j.xpath("./div[2]/a/@id")[0].strip()# 解析意思symbols = j.xpath("./div[2]/strong/text()")[0].strip()# 解析链接mean = j.xpath("./div[3]/span/text()")[0].strip()# 组装一行的内容,包括单词,音标,意思,读音链接line = [word, symbols, mean, pronunciation]print(line)

4.数据持久化,csv模块

数据持久化,这里使用csv模块

1.导入csv模块

import csv

2.文件写入

这里意思是打开文件word.csv,‘a’意思是追加写入,编码为utf-8,然后使用csv.wirter(f)获取到输出对象,输出对象向文件中写一行

with open('word.csv', 'a', encoding="utf-8") as f:# 获取输出对象writer = csv.writer(f)# 使用输出对象向csv文件写入一行writer.writerow(line)

5.关流,好习惯

最后,关闭文件流和资源流,好习惯!

            # 关闭链接resp.close()
# 关流
f.close()

6.查看结果

打开csv文件,看看自己的成果吧!

7.完整代码

import requests
from lxml import etree
import csv# 写爬虫得把网站结构摸透了,思路清晰
# 模拟请求头,防止反爬
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36"
}
# 循环网站的227课,每一个有两页,每一页有10个单词,共计4509个单词
for k in range(1, 227):print(f'{k - 1}页下载完成// {k - 1}/225')# 处理url,循环大法对每一课进行请求url = f"https://word.iciba.com/?action=words&class=11&course={k}"resp = requests.get(url=url, headers=headers)# 解析HTMLtree = etree.HTML(resp.text)# 因为有两页,循环大法for i in range(1, 3):lis1 = tree.xpath(f"/html/body/div[2]/div[1]/form/div[1]/ul[{i}]/li")for j in lis1:# 解析单词word = j.xpath("./div[1]/span/text()")[0].strip()# 解析音标pronunciation = j.xpath("./div[2]/a/@id")[0].strip()# 解析意思symbols = j.xpath("./div[2]/strong/text()")[0].strip()# 解析链接mean = j.xpath("./div[3]/span/text()")[0].strip()# 组装一行的内容,包括单词,音标,意思,读音链接line = [word, symbols, mean, pronunciation]print(line)# csv 写入文件with open('word.csv', 'a', encoding="utf-8") as f:# 获取输出对象writer = csv.writer(f)# 使用输出对象向csv文件写入一行writer.writerow(line)# 关闭链接resp.close()
# 关流
f.close()

你能把我带走吗?python:走吧相关推荐

  1. python风变编程能找工作_没有永远的工作,只有永远的“就业力”,风变编程Python走起...

    ​不怕老板又裁员,风变编程Python走到哪里都有饭碗 没有永远的工作,只有永远的"就业力",风变编程Python走起 "过完年再说"这句话在职场中似乎已经有了 ...

  2. 蓝桥杯 python 走迷宫 BFS

    蓝桥杯 python 走迷宫 BFS 题目描述 给定一个 N × × × M 的网格迷宫 G.GG的每个格子要么是道路,要么是障碍物(道路用 1 表示,障碍物用 0 表示). 已知迷宫的入口位置为 ( ...

  3. python打包安卓的方法_30个你想打包带走的Python技巧(下)

    16. 显示猫猫 我终于找到了一个充分的借口可以在我的文章中显示猫猫了,哈哈!当然,你也可以利用它来显示图片.首先你需要安装 Pillow,这是一个 Python 图片库的分支: pip3 insta ...

  4. python走迷宫_Python使用Tkinter实现机器人走迷宫

    这本是课程的一个作业研究搜索算法,当时研究了一下Tkinter,然后写了个很简单的机器人走迷宫的界面,并且使用了各种搜索算法来进行搜索,如下图: 使用A*寻找最优路径: 由于时间关系,不分析了,我自己 ...

  5. linu安装python走到300就不动了_linux centos 安装python3.7报错会在load avg: 0.63 [307/416] test_socket卡住 解决办法...

    在安装python3.7过程中,一般会很顺利的安装完成. 但是今天在安装一台虚拟机的时候报错了.#环境检查命令 ./configure --prefix=/usr/local/python376 -- ...

  6. python走后端路线_python后端学习路线

    人工智能时代,想要从事编程行业,最佳的学习语言是什么?当然是Python!Python入门简单.功能强大,已成为各大企业首选开发语言,也吸引了无数有志学子投身学习.下面是小编为您整理的关于python ...

  7. python编程绘制楼梯_Python走楼梯问题解决方法示例

    本文实例讲述了Python走楼梯问题解决方法.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 ''' 下楼问题.从楼上走到楼下共有h个台阶,每一步有 ...

  8. python第三方库有哪些-我常用的几个第三方 Python 库

    我常用的几个第三方 Python 库 今天公司停电,没上班.跑上来更新个博客,跟大家分享一下我常用的几个第三方 Python 库.Python 语言之所以能够如此流行,除了本身内置许多程序库来保障快速 ...

  9. 转行做python现在怎么样_本人现在大三之前是学习网络的,现在想转行做python程序员,该如何学习?...

    作为一名计算机专业的教育工作者,我来回答一下这个问题. 首先,对于网络专业的同学来说,如果要想在大三开始重点学习Python编程,并计划未来从事专业的Python开发,在学习上需要从三个方面做好准备, ...

  10. 骚操作!曾经爱过!用 Python 清理收藏夹里已失效的网站

    失效的书签们 我们日常浏览网站的时候,时不时会遇到些新奇的东西( 你懂的.jpg ),于是我们就默默的点了个收藏或者加书签.然而当我们面对成百上千的书签和收藏夹的时候,总会头疼不已-- 尤其是昨天还在 ...

最新文章

  1. 如何来玩MNIST数据集?
  2. Linux 服务器带宽异常跑满分析解决
  3. centos llvm安装_在CentOS上编译安装llvm-3.8.1详细教程
  4. XCode连接手机时提示A Valid provisioning profile for this executable was not found
  5. MySQL数据库创建及删除操作
  6. php fgetcsv函数,PHP中的fgetcsv()函数
  7. 谷歌浏览器怎么设置点击书签 谷歌浏览器如何设置点击书签
  8. android获取app内存信息,Android 获取内存信息(RAM,ROM)
  9. 深入了解前端开发中的高度、宽度问题
  10. 排列组合计算问题中的卡塔兰数(Catalan Number)
  11. 添加内核驱动模块(1)(mydriver.c+ Konfig+Makefile )
  12. python绘制箱线图-python绘制箱线图
  13. google手机等相关产品{时间不同步}最简解决方法
  14. 【新知实验室】TRTC体验
  15. 上位机发送与接收下位机数据
  16. 阿里CEO盒马内部演讲实录:跑得久才是最关键的
  17. Kali Linux介绍(安装教程)
  18. 电脑无法开机一直滴滴响
  19. 基于Web的二手房爬虫系统案例
  20. Real-world Anomaly Detection in Surveillance Videos【CVPR 2018】(首次引入MIL)

热门文章

  1. 素人程序员:如何在技术浪潮更迭中保持较高成长速度?
  2. 基于QT的mplayer播放器 .
  3. 《中国人史纲》读书笔记:第六、七章 纪元前八、七世纪
  4. java meta-inf作用_java - META-INF的目的是什么?
  5. spark submit提交方式
  6. linux双击执行sh脚本
  7. Mysql驱动程序是什么?
  8. Caused by: java.lang.NoSuchMethodError:xxx——依赖冲突的解决
  9. iOS APP审核注意事项
  10. 费控系统对接用友NC