参考链接:(https://blog.csdn.net/OnlyloveCuracao/art0icle/details/80768334)

原博主的代码可能因为单词发音的音频爬取有问题,导致无法将单词存入数据库,不过也非常感谢原博主,我根据源码做了一定删减和更改,下次可能会根据用户的需求,输入需求,爬取相应的单词。

主要步骤:

1.连接数据库

2.创建word单词表

3.获取网页主界面HTML代码

4.获取class(课程类型)界面HTML代码,如“考研课程”

5.获取course(课时内容,一门课程有多节课时)界面HTML,在course中得到word(单词)、pronunciation(发音)、translation(翻译)

ps:发音音频暂不考虑,好吧,博主我时间来不及了,老师在催了。。。

6.将数据存入数据库,over!

7.最后放主函数

ps:博主是个菜鸟,若有错欢迎指正。如果还有比博主还菜的同学,不知道某些变量是啥子,就print,代码里应该也有,只是注释掉了

1连接数据库:

输入相关数据,我数据库没有密码所以没写,db中的只是创建数据库时单词写错了,尬了

def conn(): # 连接数据库

db = pymysql.connect(host='localhost', user='root', password='', db='phython', port=3306)

print('已连接数据库')

return db

2创建word表

def create_table(db): # 创建一个单词表

cursor = db.cursor() # 创建游标

sql = 'CREATE TABLE IF NOT EXISTS word (id VARCHAR(255) NOT NULL,word VARCHAR(255) NOT NULL,' \

'trans VARCHAR(255) NOT NULL,word_type VARCHAR(255) NOT NULL, PRIMARY KEY (id))'

cursor.execute(sql) # 执行sql语句

print('建表完成!')

db.close()

3获取网页主界面HTML

首先加一个请求头,有些网站会屏蔽爬虫的请求,所以加一个请求头起伪装作用

然后就看注释吧

header = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '

'(KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'

}

def get_html(url): # 爬取主页

try:

html = requests.get(url, headers=header) # 使用requests库爬取

if html.status_code == 200: # 如果状态码是200,则表示爬取成功

print(url + '获取成功')

return html.text # 返回H5代码

else: # 否则返回空

print('获取失败')

return None

except: # 发生异常返回空

print('获取失败')

return None

4获取class的HTML,有效信息为class_id

class_id在div(类名‘main_l’)下的ul(类名‘cl’)标签里面的li中

ps:一门课程可能有多个class_id, 比如大学英语四级,就分为‘四级必备词汇’和‘四级救命词汇’, 它们的class_id不同

def get_url(html): # 解析首页得到所有的网页和课程id

class_list = [] # 定义存放class_id的列表

class_info = BeautifulSoup(html, "html.parser")

class_div = class_info.find('div', {'class': 'main_l'}) # 找到存放class_id的div

class_li = class_div.find('ul', {'class': 'cl'}).find_all('li') # 找到div下的ul标签内的所有li

for class_id in class_li:

class_list.append(class_id.get('class_id')) # 得到class_id

return class_list

5获取course的HTML,有效信息为:单词、发音、翻译

字典后面会有简略介绍,看注释或者百度一手嘛

def get_info(word_html, type_name): # 爬取所有的单词、发音、翻译

word_all = {} # 字典,存放词汇所有相关内容

word_info = BeautifulSoup(word_html, "html.parser")

word_div = word_info.find_all('div', class_="word_main_list_w") # 单词div内容

pronunce_div = word_info.find_all('div', {'class': 'word_main_list_y'}) # 发音div内容

trans_div = word_info.find_all('div', {'class': 'word_main_list_s'}) # 翻译div内容

for i in range(1, len(word_div)):

key = word_div[i].span.get('title') # 获取单词

pronunce = pronunce_div[i].strong.string.split() # 获取发音

trans = trans_div[i].span.get('title') # 获取翻译

if len(pronunce) < 1: # 无发音则跳过本次循环

continue

word_all[key] = [pronunce[0], trans, type_name] # 字典结构:字典名={'key': ['value_1','value2_',....,'value_n'],}

print('创建数据成功')

return word_all

6将数据存入数据库

注释里有单词存储到字典的结构:字典名={key:[value1,value2,value3]}, key在本项目中就是word单词,value1为发音,value2为翻译,value3为词汇类型。如果要获取字典中的value,则为:字典名【key】【下标】,如word_dict【key】【0】就是value1的值(博客里不能连用2个英文方括号,便用中文的代替了)

构造sql语句,Python里占位符为%s

def insert_words(word_dict, db): # 爬取数据到数据库

cursor = db.cursor() # 创建一个游标

# print(word_dict)

# word_dict是一个字典,模型:{'distant': ['[ˈdistənt]', 'adj. 远的;遥远的;疏远的;不亲近的', '考研必备词汇']}

for key in word_dict:

sql = 'INSERT INTO word(word, pronunciation, trans, word_type) values(%s, %s, %s, %s)' # 构造sql语句

try:

cursor.execute(sql, (key, word_dict[key][0], word_dict[key][1], word_dict[key][2]))

# key就是单词,word_dict[key][0]就是发音...

db.commit() # 插入数据

except:

db.rollback() # 回滚

print('数据插入成功')

db.close() # 关闭数据库

print('数据库成功关闭')

7主函数:

for循环中if语句可以改的,13是考研必备词汇,可以换成其他id,但是六级id的好像不可以,我也不知道什么问题,希望有大神能指教一下

就看注释吧

def main():

db = conn()

create_table(db) # 创建一个表

base_url = 'http://word.iciba.com/' # 主页网址

base_html = get_html(base_url) # 得到首页的H5代码

class_id = get_url(base_html) # 得到所有class_id值

#print(class_id)

print('爬取主页')

for id in class_id: # word_all为class_id所有可能的取值

# print(id)

if id == '13': # 考研词汇class_id

class_url = 'http://word.iciba.com/?action=courses&classid=' + str(id) # 利用字符串拼接起来,得到URL网址

html = get_html(class_url)

class_info = BeautifulSoup(html, "html.parser") # 课程信息

# 获取课程中所有课时,其中li的长度就是课时的数量

course_li = class_info.find('ul', {'class': 'study-speed-m cl'}).find_all('li')

name_info = class_info.find('div', {'class': 'word_h2'}) # 得到显示单词类型的div内容

# print(name)

r = re.compile(".*?

(.*?)") # 从div中匹配单词类型

python爬考研_Python爬取考研必备单词相关推荐

  1. python爬考研_python爬取考研网的信息

    今天我们使用python来爬取考研网站的信息. 目标网站: https://yz.chsi.com.cn/zsml/queryAction.do 使用的库: requests,bs4,pandas 这 ...

  2. python做壁纸_Python爬取壁纸

    不想一张张看壁纸怎么办,不想一张张下载怎么办,来让我们用python解决一切,爬取一网站所有壁纸. 1.准备前期运行环境 ·python运行环境,安装request模块 (这个问题需要自己去解决) 2 ...

  3. python能不能爬数据库_python爬取数据后不能写入到数据库中

    目标:去爬当当网某页内容中的书籍的名称,链接和评论数,然后写入数据库中 pipelins内容如下: import pymysql class DangdangPipeline(object):def ...

  4. python爬虫数据_python爬取数据分析

    一.python爬虫使用的模块 1.import requests 2.from bs4 import BeautifulSoup 3.pandas 数据分析高级接口模块 二. 爬取数据在第一个请求中 ...

  5. python京东商品_Python爬取京东的商品分类与链接

    前言 本文主要的知识点是使用Python的BeautifulSoup进行多层的遍历. 如图所示.只是一个简单的哈,不是爬取里面的隐藏的东西. 示例代码 from bs4 import Beautifu ...

  6. 杭州python爬虫招聘_python爬取招聘网站(智联,拉钩,Boss直聘)

    刚好最近有这需求,动手写了几个 就贴上代码算了 1.智联 将结果保存为python的一个数据框中 import requests from requests.exceptions import Req ...

  7. python 行情数据_python爬取期权行情数据

    想要弄点数据要求高的可以找收费的数据服务商,例如wind,东方财富,后者便宜点,tushare也提供了期权行情数据,但是门槛是有积分限制,其他的地方只能爬取了.做期权策略分析没有数据怎么行,没钱就写一 ...

  8. python程序爬电影_Python爬取电影天堂最新发布影片消息

    从今天开始我会把我学习python爬虫的一些心得体会和代码发布在我现在的博客,好记性不如烂笔头,以便以后的我进行复习. 虽然我现在的爬虫还很幼小,希望有一天她能长得非常非常的强大. --------- ...

  9. python 简书_python爬取简书网文章的方法

    python爬取简书网文章的方法 发布时间:2020-06-30 14:37:08 来源:亿速云 阅读:100 作者:清晨 这篇文章主要介绍python爬取简书网文章的方法,文中示例代码介绍的非常详细 ...

最新文章

  1. 使用TreadPool时的ThreadLocal示例
  2. Timus题目中测试数据数量的计算
  3. 大话设计模式—代理模式
  4. Internationalization(i18n) support in SAP CRM,UI5 and Hybris
  5. C#高性能TCP服务的多种实现方式
  6. linux桌面版排行2019_新兴的桌面发行版 Septor Linux 发布 2019 版
  7. 使用JMeter对异步HTTP / REST服务进行压力/负载测试
  8. 如何生成全局唯一标识
  9. 2021年末储能季,送4本面试宝典
  10. java.lang.UnsupportedOperationException WebView is not allowed in privileged processes
  11. 多元统计分析最短距离法_多元统计分析(11个常见的多变量分析方法)
  12. 卸载有卸载密码和安全策略的OFFICESCAN客户端(破解)
  13. linux操作系统原理【3】
  14. abap-商业发票管理系统
  15. Windows下使用mingw32
  16. ImageView实现圆形头像效果
  17. 解决笔记本电脑连的上WIFI但上不了网问题
  18. 快捷餐饮之店家后台评论管理及餐桌管理实现
  19. window+将html文件设置为我们的壁纸
  20. Origin中画折线图实现双X轴和双Y轴(双坐标轴)

热门文章

  1. 写论文自动生成参考文献的方法
  2. python生成二维码教程_使用Python生成个性二维码
  3. python项目二:多种验证码及二维码输出
  4. jsch jar包连接不上ssh报Algorithm negotiation fail 错误
  5. 全球与中国太阳能测试仪市场现状及未来发展趋势
  6. openwrt procd启动流程和脚本分析
  7. Code First开发系列之管理并发和事务
  8. 零基础转行学web前端开发好学吗?爱创课堂告诉你
  9. Jupyter Notebook 输出有颜色的文字
  10. 错误跳转html页面模板,404错误页面模板代码大全 - 搜外SEO问答