为什么要学习爬虫?
在这个大数据时代,尤其是人工智能浪潮兴起的时代,不论是工程领域还是研究领域,数据已经成为必不可少的一部分,而数据的获取很大程度上依赖于爬虫的爬取 , 所以爬虫也逐渐变得火爆起来 。
怎样提高爬取速度?
为了提高爬取速度又需要考虑并行爬取、分布式爬取方面的内容,爬虫的通用性 、 易用性、架构都需要好好优化
简单爬虫介绍:
爬虫可以简单分为几步:抓取页面、分析页面和存储数据。
在抓取页面的过程中 ,我们需要模拟浏览器向服务器发出请求,所以需要用到一些 Python 库来实现 HTTP 请求操作 。 在本书中,我们用到的第三方库有 requests 、 Selenium 和 aioh即 等。
抓取网页代码之后,下一步就是从网页中提取信息 。 提取信息的方式有多种多样,可以使用正则来提取 ,但是写起来相对比较烦琐 。 这里还有许多强大的解析库 ,如 lxml 、 Beautiful Soup 、 pyquery等 。 此外,还提供了非常强大的解析方法,如 XPath 解析和 css 选择器解析等,利用它们,我们可以高效便捷地从网页中提取有效信息 。
题目要求
"""
如果有一个20个单词的列表,如何去并发爬取["he"]*20单词的意思
大家可以用多线程,也可以用线程池(ThreadPoolExecutor)完成
爬取url="http://dict.youdao.com/w/eng/{}/".format(word),获得有道翻译上单词的意思
输出的数据结构为:
单词名字,单词发音,单词内容
例如:
{"Word": "apple",
"Proc": "英 [] 美[]",
"Desc": "n. 瓷器 adj. 瓷制的"
}
"""
from pyquery import PyQuery as pq
import requests
import threading
def download_html(word="word"):
url = "http://dict.youdao.com/w/eng/{}/".format(word)
r = requests.get(url)
if r.status_code == 200:
doc = pq(r.text)
print(decode_html(word, doc))
def decode_html(word, doc):
output = {}
output["Word"] = word
str_pro = []
for pro in doc.items(".baav .pronounce"):
#print(pro, type(pro))
str_pro.append(pro.text())
#print(pro.text())
output["Pro"] = "".join(str_pro)
str_trans = []
for li in doc.items("#phrsListTab .trans-container ul li"):
# "your code"
#print(li, type(li))
#print(li.text())
str_trans.append(li.text())
output["Desc"] = "".join(str_trans)
return output
#url = "http://dict.youdao.com/w/eng/apple/"
# word="apple"
# download_html(word)
if __name__ == "__main__":
# url = "http://dict.youdao.com/w/eng/apple/"
words = ["apple", "tree", "tomorrow", "fruit", "program", "chip", "notebook", "database"]
for word in words:
threadObj = threading.Thread(target=download_html, kwargs={'word': word})
threadObj.start()
print("OK")
=======================================================
OK
{'Word': 'notebook', 'Pro': "英 ['nəʊtbʊk]美 ['notbʊk]", 'Desc': 'n. 笔记本,笔记簿;手册'}
{'Word': 'fruit', 'Pro': '英 [fruːt]美 [frut]', 'Desc': 'n. 水果;产物vi. 结果实vt. 使……结果实n. (Fruit)人名;(法)弗吕;(英)弗鲁特'}
{'Word': 'program', 'Pro': "英 ['prəʊɡræm]美 ['proɡræm]", 'Desc': 'n. 程序;计划;大纲vt. 用程序指令;为…制订计划;为…安排节目vi. 编程序;安排节目;设计电脑程式'}
{'Word': 'apple', 'Pro': "英 ['æp(ə)l]美 ['æpl]", 'Desc': 'n. 苹果,苹果树,苹果似的东西;[美俚]炸弹,手榴弹,(棒球的)球;[美俚]人,家伙。'}
{'Word': 'tomorrow', 'Pro': "英 [tə'mɒrəʊ]美 [tə'mɔro]", 'Desc': 'n. 明天;未来adv. 明天;未来地(等于to-morrow)'}
{'Word': 'database', 'Pro': "英 ['deɪtəbeɪs]美 ['detəbes]", 'Desc': 'n. 数据库,资料库'}
{'Word': 'tree', 'Pro': '英 [triː]美 [tri]', 'Desc': 'n. 树;木料;树状物vt. 把...赶上树vi. 爬上树;逃上树n. (Tree)人名;(英)特里'}
{'Word': 'chip', 'Pro': '英 [tʃɪp]美 [tʃɪp]', 'Desc': 'vt. 削,凿;削成碎片vi. 剥落;碎裂n. [电子] 芯片;筹码;碎片;(食物的) 小片; 薄片'}
网友评论