扇贝网单词爬取

对于一个英语是硬伤的我来说,就只能老老实实的记单词咯。
然后就有了目标地址:扇贝 程序员必学电脑计算机专业英语词汇 1700 词

环境:Python3.5
模块:BeautifulSoup4, requests
思路:

  1. 通过主页面的地址进入把需要用到的 12 个链接爬到手
    shanbay1

  2. 然后打开每个链接(一个示例地址),把里面的单词和汉语翻译爬取下来
    shanbay2

  3. 最后把获取的单词和汉语翻译下载到本地文本

代码示例

1.引入相关包,requests 下载 html 页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests
from bs4 import BeautifulSoup
import random

items = [] # 需要下载的字段
links = [] # 要使用的地址

def get_html(url):
headers = {
'User-Agent': get_user_agent() # 获取随机User-Agent
}
proxies = {
'https': 'https://114.115.218.71'
}
# 此项目不需User-Agent和代理,但为了笔记的完整性写上了
try:
r = requests.get(url, headers=headers, proxies=proxies, timeout=5)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return 'error'

2.通过 get_html()下载页面后解析页面信息

1
2
3
4
5
6
7
8
9
10
def get_info(url):
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
table = soup.find_all('tr', class_='row')

for td in table:
item = {} # 定义一个字典存放字段
item['word'] = td.find('td',class_='span2').find('strong').text
item['translate'] = ''.join(td.find('td', class_='span10').text.split('\n'))
items.append(item) # 添加到列表中

3.由主链接获取相关链接,然后迭代调用 get_info()

1
2
3
4
5
6
7
8
9
10
11
def get_links(url):
html = get_html(url)
soup = BeautifulSoup(html, 'lxml')
td = soup.find_all('td', class_='wordbook-wordlist-name')
for a in td:
link = a.find('a')['href']
for i in range(1,11):
links.append('https://www.shanbay.com' + link + '?page=' + str(i))

for link in links:
get_info(link)

4.把解析的内容下载到本地

1
2
3
4
5
def down_info():
with open('./word.txt', 'w') as f:
for item in items:
f.write(item['word'] + '\n' + item['translate'] + '\n\n')
print('Download finished!\n共{}个'.format(len(items)))

看一下下载到本地的内容

扇贝3

最后贴一下源码地址程序员必学电脑计算机专业英语词汇 1700 词