爬取并处理150708个英语单词的例句

       还是爬取必应在线词典的内容。

       实现代码主要用到了BeautifulSoupselectw3lib.htmlremove_tags,具体实现很简单,主要是确定所要爬取的例句在页面源代码中处于什么位置,即如下所示的标签顺序:

div> div > div > div > div.se_n_d
div > div > div > div > div > div > span.b_regtxt
div > div > div > div > div > div > a.p1-8.b_regtxt

 

       直接通过观察定位很困难,可以借助于PaCharm的有关功能,具体如下所述:

       1)首先在Bing在线词典查询一个单词,确定Bing提供了这个单词的注音、释义与例句(有缺少的内容不行);

       2)查看页面源代码,将所有源代码复制并粘贴到本地一个HTML文件;

       3)使用PaCharm打开2)所新建的HTML文件;

       4)在PaCharm的工具栏中选择Code选项,并选中Reformat Code,如图1所示;

 

图1 Reformat Code功能

 

       4)此时将光标移动到HTML文件的任何位置,底部都会显示当前光标所在位置的标签顺序,如图2所示;

 

图2 标签顺序

 

       5)(据说有个功能可以直接把标签路径提取出来,但我没找到,而是……)把底部的标签顺序记下来并放到Python程序的

相应位置。注意:并不是需要记录Pacharm底部所示的完整标签路径,而是从当前光标所在代码块的起始处记录,对于图2中的”

程序代码“,它的起初位置如图4所示。

 

图3 光标所在位置

 

图4 标签起始记录位置

 

       接着是准备数据,将含有待爬取例句单词的文件放在指定文件夹下,如图5所示,并将相应路径填入代码中。

 

图5 待爬取例句的单词文件

 

       所用Python代码如下所示。

 

import urllib.request
import re
from bs4 import BeautifulSoup

myRule5 = r'((http|ftp|https)://)?(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\&%_\./-~-]*)?'
compile_name5 = re.compile(myRule5, re.M)
myRule6 = r'.*?\.com|.*?\.cn'
compile_name6 = re.compile(myRule6, re.M)


def readData(dataPath, fileName):
    file = open(dataPath + fileName, 'r', encoding='UTF-8')
    nameList = file.readlines()
    return nameList

def grab(dataPath, fileName, resultPath, style):
    nameList = readData(dataPath, fileName)

    for word in nameList:
        # web_addr = "https://cn.bing.com/dict/search?q=" + str(EnglishWord) + "&qs=n&form=Z9LH5&sp=-1&pq=" + str(EnglishWord) + "&sc=8-8&sk=&cvid=AA1C8A024F484889A4B788484086A7DF"
        # url = "https://cn.bing.com/dict/search?q=" + str(word).replace("\n", "") + "&qs=n&form=Z9LH5&sp=-1&pq=" + str(word).replace("\n", "") + "&sc=8-8&sk=&cvid=AA1C8A024F484889A4B788484086A7DF"
        url = "https://cn.bing.com/dict/search?q=" + str(word).replace("\n", "")
        res = urllib.request.urlopen(url)
        res.encoding = 'utf-8'
        resp = urllib.request.urlopen(url)
        # 读取网页源码内容
        text = resp.read()
        soup = BeautifulSoup(text, style)
        print("word = " + str(word))
        myList = open(resultPath + str(word).replace("\n", "") + ".txt", mode='w', encoding='utf-8')

        # numbers = soup.select('div> div > div > div > div.se_n_d')
        # acronyms = soup.select('div > div > div > div > div > div > span.b_regtxt')
        # English_Words = soup.select('div > div > div > div > div > div > a.p1-8.b_regtxt')
        all = soup.select('div > div > d
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值