文章目录

  • 引言
  • 分析页面
  • 代码实现

引言

大学英语六级几乎是每个大学生必过的考试,不管是读研还是找工作,很多都有这方面的要求,而六级词汇是其中重要的一环。今天给大家带来一个案例,用python爬取新东方在线网站的大学英语六级大纲词汇,并保存到本地,下面跟随我一起来实践吧。

分析页面

url链接:https://cet6.koolearn.com/20181225/825301.html,打开页面,如图所示:

我们需要2019年6月大学英语六级大纲词汇带音标:A—Z,由于每个字母开头的词汇位于不同的链接,因此需要先构建url列表,然后遍历获取词汇。我们打开两个链接,如图所示,有的字母只有一页单词,有的有多页,因此每个字母也需要获取完整的页面url列表,然后遍历抓取正文内容。


获取url列表用xpath较为方便,而获取正文内容我刚开始也尝试用xpath,但抓取到了很多空格和其他干扰字符,后尝试用正则表达式,精准的获得了目标内容。下面开始正式代码。

代码实现

1、首先导入可能要用到的模块,并定义main函数,采用面向对象编程,预先实例化一个类,并调用run方法,然后把目标内容写入文件。

from lxml import etree
import requests
import re
import timeif __name__ == '__main__':dc = WordSpider()word_lib = dc.run()file_name = 'CET—6 word.txt'with open(file_name, 'w', encoding='utf-8') as f:f.write(str(word_lib))

2、定义类,并初始化

class WordSpider(object):def __init__(self):self.url = 'https://cet6.koolearn.com/20181225/825301.html'self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 Edg/89.0.774.50'
}

3、构建获取url列表的方法

    def get_url_list(self):"""构建url列表"""response = requests.get(self.url, headers=self.headers)response.encoding = 'utf-8'content = response.texthtml = etree.HTML(content)url_lst = html.xpath('//div[@align="center"]/strong/a/@href')title_lst = html.xpath('//div[@align="center"]/strong/a/text()')url_dict = dict(zip(title_lst, url_lst))return url_dict

4、创建方法发送请求,获取url响应,并提取网页源代码

    def parse_url(self, url):"""发送请求,获取响应"""response = requests.get(url, headers=self.headers)response.encoding = 'utf-8'return response.text

5、分别创建方法获取单个字母的多页url以及获取所有字母的完整url列表

    def get_surl_list(self, page_html):"""获取单个字母的多页url"""html = etree.HTML(page_html)surl_list = html.xpath('//div[@id="page"]/a/@href')surl_list = surl_list[:-1]return surl_listdef get_finurl_list(self, url_dict):"""获取所有字母的完整url列表"""for k, v in url_dict.items():# print(v)page_html = self.parse_url(v)# print(word_html)isnext = '下一页'if isnext in page_html:url_dict[k] = self.get_surl_list(page_html)else:url_dict[k] = [v]return url_dict

6、创建方法分别获取单页的单词、多页的首页单词、多页的中间页单词、多页的末尾页单词。

    def get_word_single(self, word_html):"""获取单页的单词"""pattern = '2019年6月大学英语六级大纲词汇带音标:A—Z.*?</strong>.*?</p><p>(.*?)<style type="text/css" _ue_org_tagname="style">'res = re.findall(pattern, word_html, re.S)patt2 = '\s+(.*?)</p><p>'word_list = re.findall(patt2, res[0], re.S)return word_listdef get_word_1(self, word_html):"""获取多页的首页单词"""pattern = '2019年6月大学英语六级大纲词汇带音标:A—Z.*?</strong>.*?</p><p>(.*?)<style type="text/css" _ue_org_tagname="style">'res = re.findall(pattern, word_html, re.S)patt2 = '\s+(.*?)</p>'word_list = re.findall(patt2, res[0], re.S)return word_listdef get_word_mid(self, word_html):"""获取多页的中间页单词"""pattern = '<div class="xqy_core_text">\s+<p>(.*?)<style type="text/css" _ue_org_tagname="style">'res = re.findall(pattern, word_html, re.S)patt2 = '\s+(.*?)</p>'word_list = re.findall(patt2, res[0], re.S)return word_listdef get_word_last(self, word_html):"""获取多页的末尾页单词"""pattern = '<div class="xqy_core_text">\s+<p>(.*?)<style type="text/css" _ue_org_tagname="style">'res = re.findall(pattern, word_html, re.S)patt2 = '\s+(.*?)</p><p>'word_list = re.findall(patt2, res[0], re.S)return word_list

7、创建run()方法实现主要业务逻辑

    def run(self):"""实现主要业务逻辑"""url_dict = self.get_url_list()finurl_list = self.get_finurl_list(url_dict)# print(finurl_list)finword_dict = {}for tit, ur in finurl_list.items():sing_letter_list = []ur_num = len(ur)time.sleep(1)if ur_num == 1:word_html = self.parse_url(ur[0])word_list = self.get_word_single(word_html)sing_letter_list.extend(word_list)elif ur_num == 2:word_html_1 = self.parse_url(ur[0])word_list_1 = self.get_word_1(word_html_1)sing_letter_list.extend(word_list_1)word_html_2 = self.parse_url(ur[1])word_list_2 = self.get_word_last(word_html_2)sing_letter_list.extend(word_list_2)else:word_html_1 = self.parse_url(ur[0])word_list_1 = self.get_word_1(word_html_1)sing_letter_list.extend(word_list_1)for i in range(1, ur_num-1):word_html_mid = self.parse_url(ur[i])word_list_mid = self.get_word_mid(word_html_mid)sing_letter_list.extend(word_list_mid)word_html_last = self.parse_url(ur[-1])word_list_last = self.get_word_last(word_html_last)sing_letter_list.extend(word_list_last)# print(sing_letter_list)finword_dict[tit] = sing_letter_listprint(finword_dict)return finword_dict

8、大功告成,执行结果如图所示。


So,你学会了吗?

欢迎关注微信公众号“爬取你的深度神经网络”获取源代码和更多精彩文章。

Python爬取新东方在线网站大学英语六级词汇相关推荐

  1. Python爬虫爬取伯乐在线网站信息

    一.环境搭建 1.创建环境 执行pip install scrapy安装scrapy 使用scrapy startproject ArticleSpider创建scrapy项目 使用pycharm导入 ...

  2. python爬取百度在线语音合成的音频

    python爬取百度在线语音合成 URL:https://ai.baidu.com/tech/speech/tts_online 抓包 api从这里抓包,用的post请求,返回的是base64文件格式 ...

  3. 教你用Python爬取表情包网站下的全部表情图片

    教你用Python爬取表情包网站下的全部表情图片 又是我啦~~~ 最近上网的时候老看到有人用Python爬取表情包,心痒痒自己也整了一个. 使用到的扩展库:BeautifulSoup, request ...

  4. 大学英语六级词汇(笔记)

    大学英语六级词汇 a abase abate abdicate abdomen abet abhor abide(bear?) abject ablaze abound(abundant) abrea ...

  5. 手把手教你用python爬取人人贷网站借款人信息

    P2P是近年来很热的一个行业,由于这个行业在国内兴起才不久,国内的很多学者对这个行业都兴趣盎然,在大学研究互联网金融的学者更是有一大群.小编是学金融出身,深知数据在做学术研究的重要性,之前有不少学互联 ...

  6. python 爬取猫眼电影网站数据

    完整代码下载:https://github.com/tanjunchen/SpiderProject/tree/master/maoyan python 爬取 movie.douban.com 网站 ...

  7. python爬取安居客网站上北京二手房数据

    目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...

  8. [Python]爬取 游民星空网站 每周精选壁纸(1080高清壁纸) 网络爬虫

    一.检查 首先进入该网站的https://www.gamersky.com/robots.txt页面 给出提示: 弹出错误页面 注: 网络爬虫:自动或人工识别robots.txt,再进行内容爬取 约束 ...

  9. Python爬取某音乐网站

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 爬取某音乐网站,我们先搜索歌曲,然后随意点进一首歌,然后在新弹出的歌曲页面按F12开始抓包,并刷新 ...

  10. 利用python爬取实习僧网站上的数据

    最近在找实习,就顺便想到用python爬取一些职位信息看看,有哪些岗位比较缺人. #_*_coding:utf-8_*_import requests from bs4 import Beautifu ...

最新文章

  1. 关于struts1的配置
  2. mysql正则表达式配置,MySQL REGEXP:正则表达式
  3. 世界级Oracle专家Jonathan Lewis:我很为DBA们的未来担心(图灵访谈)
  4. haproxy调度web案例
  5. msc货物跟踪查询_运联研究 | 货物全程可视,能否真正消除物流信息盲点?
  6. 自己架设手机网游_起来,不愿做网游的奴隶!
  7. python正则表达式怎么表示零个或多个字符_VBA中正则表达式之分组
  8. 【激活函数】PRelu激活函数
  9. 【CuteJavaScript】Angular6入门项目(1.构建项目和创建路由)
  10. Python的psutil模块监控内存代码
  11. Layer/jquery获取父窗口的元素
  12. itextpdf 二维码
  13. 2019年美国大联盟美国总决赛小学组获奖牌名单
  14. 谷歌上做SEO价钱大概多少,Google优化怎么收费?
  15. bookkeeper安装及测试体验
  16. 第2章第27节:英文排版技巧:大间距与大行距的应用 [PowerPoint精美幻灯片实战教程]
  17. Vertu的签名黄金经典手机
  18. Scrapy实战案例--抓取股票数据并存入SQL数据库(JS逆向)
  19. 【LINUX】r,w,a,r+,w+,a+概念和区别
  20. 当一个测试工程师准备找工作,需要准备什么?

热门文章

  1. android webrtc编译成功之后,webrtc封装sdk(五)编译webrtc android遇到的问题
  2. 陈文灯畅谈2005考研数学复习策略
  3. 每日技巧分享:怎么裁剪音频,快学习起来
  4. 相对湿度和绝对湿度的区别
  5. Object Classification Using CNN-Based Fusion of Vision and LIDAR in Autonomous Vehicle Environment
  6. flyme android 7 root,魅族PRO7怎么Root?魅族PRO7一键ROOT权限获取图文教程(系统自带Root功能)...
  7. mybatis入门1
  8. 服务器维护常见的问题
  9. 青春-转自韩寒Sina Blog
  10. 计算机网络上有个红叉没无线,电脑无线网络连接不上显示红叉