中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python學習教程:成語查詢工具 - 數據獲取

發布時間:2020-08-19 02:55:38 來源:ITPUB博客 閱讀:165 作者:千鋒Python唐小強 欄目:編程語言

Python學習教程:成語查詢工具 - 數據獲取

我們從這個網站上獲取想要的內容,不用考慮太多的板塊,直接按照字母檢索即可

Python學習教程:成語查詢工具 - 數據獲取

進去每個字母的頁面中獲取數據以及循環頁數,值得注意的是頁面中有相當多的重復項,記得進行去重操作

Python學習教程:成語查詢工具 - 數據獲取

1. 頁面獲取

常規套路,因為這里需要用到xpath,所以直接返回html字符串,這里因為數據中有大量中文繁體字的原因,選擇字符編碼為gbk

def get_html(url):
 r = requests.get(url, headers=headers)
 r.encoding = 'gbk'
 return r.text

2. 當前頁數據獲取

頁面中的成語以及釋義都是保存在列表中的,直接對列表遍歷獲取即可(僅當前頁),值得注意的是需要對重復項清洗,這里使用匿名函數lambda z: dict([(x, y) for y, x in z.items()]),對字典的鍵值執行兩次翻轉

def get_curr(url):
 html = etree.HTML(get_html(url))
 lis = html.xpath('//li[@class="licontent"]')
 context = {}
 for li in lis:
 if li.xpath('./span[@class="hz"]/a/text()') and li.xpath('./span[@class="js"]/text()'):
 idiom = li.xpath('./span[@class="hz"]/a/text()')[0]
 interpretation = li.xpath('./span[@class="js"]/text()')[0]
 context[idiom] = interpretation
 func = lambda z: dict([(x, y) for y, x in z.items()])
 idiom_dict = func(func(context))
 return idiom_dict

3. 頁數循環

頁面底部有頁數的標簽,包括總頁數、當前頁、末頁、下一頁等,但是如果總頁面僅1頁的就沒有任何顯示,到達項目尾頁時就沒有任何頁數標簽顯示了(怪不怪?),我們這里就獲取到總頁數和當前的字母索引即可,這里的write_data和print是為了查看一下每個字母索引的數據情況,因為最后的執行會將數據寫入一個單獨的文件,如果你想要看到每個字母的成語,就可以取消這里的注釋查看

def run(url, context):
 html = etree.HTML(get_html(url))
 if html.xpath('//a[contains(text(), "末頁")]/@href'):
 text = html.xpath('//a[contains(text(), "末頁")]/@href')[0]
 letter = re.search('\w', text).group(0) or url.split('/')[-1][0]
 total = re.search('\d+', text).group(0) or 1
 else:
 letter = url.split('/')[-1][0]
 total = 1
 for num in range(1, int(total) + 1):
 page_context = get_curr('http://chengyu.kxue.com/pinyin/' + letter + '_' + str(num) + '.html')
 context.update(page_context)
 print("完成{}的添加,共{}".format(letter + '_' + str(num), total))
 #write_data('grandSon/' + url.split('/')[-1][0] + '.json', context)
 #print("完成{}的寫入".format(url.split('/')[-1][0]))
 return context

4. 數據寫入

直接轉成json寫入文件,可以調整一下格式

def write_data(file, context):
 with open(file, 'w', encoding='utf-8') as f:
 f.write(json.dumps(context, indent=2, ensure_ascii=False))

5. 遍歷所有字母

去網頁主頁遍歷所有字母的鏈接,然后對每個鏈接調用以上方法即可

url = "http://chengyu.kxue.com/"
 html = etree.HTML(get_html(url))
 file = 'idiom.json'
 context = {}
 urls = html.xpath('//div[@class="content letter"]/li/a/@href')
 for url in urls:
 context.update(run("http://chengyu.kxue.com" + url, {}))
 write_data(file, context)

伙伴們有不清楚的地方,可以留言,更多的關于 Python實戰和學習教程也會繼續為大家更新!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

集贤县| 彩票| 都江堰市| 通河县| 镇巴县| 太保市| 宁乡县| 江都市| 天气| 贵定县| 建瓯市| 元谋县| 江源县| 宜宾县| 卓尼县| 连江县| 韶关市| 南华县| 东乡族自治县| 平果县| 区。| 同仁县| 宣威市| 湟中县| 华蓥市| 湖北省| 三亚市| 乌鲁木齐县| 枣庄市| 信丰县| 龙胜| 中方县| 遂川县| 墨江| 独山县| 赤壁市| 新昌县| 湟源县| 涞源县| 永川市| 兰西县|