首页 文章 精选 留言 我的

精选列表

搜索[自适应爬虫],共4652篇文章
优秀的个人博客,低调大师

大快搜索数据爬虫技术实例安装教学

Hadoop作为搭建大数据处理平台的重要“基石”,关于它的分析和讲解的文章已经有很多了。Hadoop本身是一分布式的系统,因此在安装的时候,需要多每一个节点进行组建的安装。并且由于是开源软件,其安装过程相对比较复杂。这也是很多人在搭建hadoop运行环境时总是不能一次性成功的主要原因。hadoop每个组建都要做很多的配置工作,如果手动去完成这个工作,工作量其实还是非常庞大。正是这一点我觉得很多做国产发行版hadoop软件开发的都没有大快的DKhadoop发行版做的好。我记得在之前写DKHadoop运行环境搭建流程的时候也提到过这个问题,DKH可以说是把易用性做的非常好了,无论是对于老手还是新入门者,上手速度要比其他的一些发行版快的多。针对hadoop每个组建都要配置的这种情况,DKH提供了自动化安装应用来部署Hadoop。这就大大缩短了Hadoop的安装时间,同时也简化了安装Hadoop的过程。如果你在安装之后想要拓展节点,其实也不用担心。因为DKH中提供了节点管理的功能。“节点”是集群中的服务器。DKH集群中的节点担任不同服务的不同角色,协同工作。我们可以在DKH管理界面添加节点。 然后在相应的服务中选择“添加角色”,那么新添加的节点就有了该服务的功能。1、进入管理界面(在“主机”菜单中) 这里你可以查看节点的基本信息,并且可以添加和删除节点。2、添加节点:点击“向集群添加主机”进入“添加节点”界面 输入对应节点的IP地址即可。3、为节点指定服务:在每一个服务界面中,选择“添加角色”如下图所示 选择要添加的节点,点击“继续”即可完成添加。

优秀的个人博客,低调大师

python爬虫之BeautifulSoup4遇坑记

#!/usr/bin/python # -*- coding: UTF-8 -*- from urllib import request from bs4 import BeautifulSoup html = request.urlopen("https://movie.douban.com/") bs = BeautifulSoup(html, "lxml-xml") print(bs.title) 到目前为止,我知道的py36和37中的parser只能选择html-parser和html5lib而lxml和lxml-xml不能用 先说下经过: 1.run 2.报错如下 D:\Users\lunjiawang\wlj\devkit\anaconda\install\python.exe D:/Users/lunjiawang/PycharmProjects/script/src/Practice.py Traceback (most recent call last): File "D:/Users/lunjiawang/PycharmProjects/script/src/Practice.py", line 7, in <module> bs = BeautifulSoup(html, "lxml-xml") File "D:\Users\lunjiawang\wlj\devkit\anaconda\install\lib\site-packages\bs4\__init__.py", line 198, in __init__ % ",".join(features)) bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml-xml. Do you need to install a parser library? Process finished with exit code 1 3.第一反应 Do you need to install a parser library?这句导致我以为自己的lxml包没有安装,故使用 pip install lxml 因为我是用的conda所以比较方便,但是这导致一个信任问题:conda真的把我要的包导进来了吗?在安装完之后还不行的情况下,我产生了这样的想法,所以开始google 4.google出来的答案基本一致:lxml版本不兼容(后来想想话是没说错,倒是容易产生迷惑),根据网上的大神(基本都是stackOverflow,github啥的),下载4.0.0的版本,用的amd64 cp35\36下载,然后用pip install 文件目录安装。不行,报错原因简单:not support in this platform 5.显而易见,平台不支持,当时的想法是系统平台,而不是py平台,继续找该问题的方法 6.直到有个网友说win10 py35需要下载3.7.2之前的版本,一脸懵逼,然后我想,既然4.0.0不行,那么py35和我的37应该差别不大,有可能还是lxml版本问题(没错啊,就是迷惑了),所以下了3.7的(其实在下载4.0.0的时候我就尝试下了3.8也不行,心想不会就一墙之隔吧),满心激动,安装-报错,此时都有点郁闷了 7.继续找答案,在StackOverflow上有个家伙说他是py37的下载4.2.5 cp37版本的lxml就好了。嗯?cp37?难道?35\36\37都是lxml版本的意思?对啊,吐血,这样说,我37之前一直下载4.2.5之前的版本不是找死吗?因为没有cp37啊。 8到此未知,虽然问题没有解决,但是发现自己的方向找错了。我的lxml版本没问题,有问题的是???是什么? 9.继续寻找,到源码看看吧,发现有如下 :param features: Desirable features of the parser to be used. This may be the name of a specific parser ("lxml", "lxml-xml", "html.parser", or "html5lib") or it may be the type of markup to be used ("html", "html5", "xml"). It's recommended that you name a specific parser, so that Beautiful Soup gives you the same results across platforms and virtual environments.咦,好像parser有好多个,不仅仅只有lxml嘛。难道?这个跟py版本有关?为了验证这个想法,继续google 10.狂输: py37 Couldn't find a tree builder with the features you requested 老天不负苦心人,终于有个CSDN老哥ssITt猿写了个py36Couldn't find a tree builder with the features you requested:的文章,既然找不到37的就用36试试呗,里面给了方法: 在报错代码中把函数参数中所有的"lxml"改成"html.parser" 例子: bs = BeautifulSoup(r, 'lxml') #改成 bs = BeautifulSoup(r, 'html.parser') 11.调整,run 成功了 总结:这个过程,我一直在抱怨python怎么这么麻烦,包也没有人管理,下载个三方包还需要自己手动pip,依赖没人管理,下错了就给你error,社区(包括网站),更新的是勤快,但是有py、pip更新的勤快嘛?说不定下周我这个parser又不管用,又不知道会坑死多少人 话说回来,从这个小bug中发现自己的思路还是有点问题:首先,遇到问题马上google,这个不太好,最好的方法就是源码,看最底层的东西,如果是刚学习一个工具、语言、软件啥的,最好是从doc里面汲取最官方的东西(只是全英文理解起来不是很容易,但是很详细很完整,大家可以看我其他博客里面对es的官网翻译,最近也在逼自己看原文);其次,动手能力差,其实很早就看到有很多parser,但是因为没想到跟这个有关就没有一个个试,总期待别人给现成的答案。再者,独立思考的能力也很重要,很明显这次的逻辑应该是:conda已经帮我安装了lxml包,但是程序报包找不到,说明程序这个报错只是表象,而不能轻易相信包的版本有问题。然后应该看前面一句报错: Couldn't find a tree builder with the features you requested: lxml-xml 找不到lxml-xml这个features,那么我的包没问题,只是features有问题,此时进入源码发现有很多features,换一个试试就完了 哎,逻辑太重要,我总是想的比较复杂,归根结底还是因为没有很好的独立思考的能力, 愿与大家共勉共进步

优秀的个人博客,低调大师

Python爬虫(应朋友之邀)-功能实现版

环境:win10 py37 工具:pyCharm anaconda 主要包:BeautifulSoup,re 代码: #!/usr/bin/python # -*- coding: UTF-8 -*- import re from urllib import request from bs4 import BeautifulSoup html = request.urlopen("http://data.eastmoney.com/report/20181101/APPISWTR4upPASearchReport.html") bs = BeautifulSoup(html, "html.parser") print("title") print(bs.title) print("meta") links = bs.find_all("meta") count = 0 for link in links: count = count + 1 print(count) attrs = link.attrs if "name" in attrs.keys(): print("name:", attrs['name']) if "http-equiv" in attrs.keys(): print("httpEquiv:", attrs['http-equiv']) if "content" in attrs.keys(): print("content:", attrs['content']) print("p") ps = bs.find_all("p") index = -1 for p in ps: contents = p.contents if len(contents) > 0: content = contents[0] if str(content).__contains__("盈利预测"): index = ps.index(p) break needContent = "" if index != -1: index = index + 2 needContent = str(ps[index]) print(needContent) match1 = re.search(r'[\u4e00-\u9fa5]{4}20[0-9]{2}[\u4e00-\u9fa5]-20[0-9]{2}[\u4e00-\u9fa5]', needContent) match2 = re.search(r'EPS为.*元', needContent) match3 = re.search(r'([\u4e00-\u9fa5]{4}“).*”[\u4e00-\u9fa5]{2}', needContent) print(match1.group()) print(match2.group()) print(match3.group())

优秀的个人博客,低调大师

爬虫入门之绘图matplotlib与词云(七)

1 绘制条形图 import matplotlib # 数据可视化 from matplotlib import pyplot as plt # 配置字体 matplotlib.rcParams["font.sans-serif"] = ["simhei"] # 黑体 matplotlib.rcParams["font.family"] = "sans-serif" ''' left, x轴 height, y轴 width=0.8 ,轴宽 ''' # .bar(x轴, y轴, label=u"标签名", color="颜色") plt.bar([1], [123], label="广州", color="r") plt.bar([2], [141], label=u"北京") plt.bar([3], [11], label=u"上海") plt.bar([4], [41], label=u"深圳") plt.bar([5], [181], label=u"香港") plt.legend() # 绘图 # plt.show() plt.savefig("1.jpg") # 保存图片 2 绘制智联招聘职位岗位数量图 import urllib.request import urllib.parse import re import matplotlib import matplotlib.pyplot as plt # 数据可视化 matplotlib.rcParams["font.sans-serif"] = ["simhei"] # 配置字体 matplotlib.rcParams["font.family"] = "sans-serif" header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"} def getnumberbyname(searchname): searchname = {"kw": searchname} searchname = urllib.parse.urlencode(searchname) url = "http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E6%B7%B1%E5%9C%B3&" + searchname + "&p=1&isadv=0" print(url, '==========') req = urllib.request.Request(url, headers=header) pagesource = urllib.request.urlopen(req).read().decode('utf-8', 'ignore') restr = "<em>(\\d+)</em>" # 正则表达式,()只要括号内的数据 regex = re.compile(restr, re.IGNORECASE) mylist = regex.findall(pagesource) return mylist[0] # 岗位列表 pythonlist = ["python", "python 运维", "python 测试", "python 数据", "python web"] num = 0 for pystr in pythonlist: num += 1 print(pystr, eval(getnumberbyname(pystr))) # 绘制柱状图 plt.bar([num], eval(getnumberbyname(pystr)), label=pystr) plt.legend() # 绘制 plt.show() # 显示 3 词云 “词云”这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)提出。“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。 词频 分词 语句切割 import jieba mystr = "小姐姐,我看你挺能睡的,睡我还不好" wordsplitList = jieba.cut(mystr, cut_all=True) # 切割, 全部切割 print(wordsplitList) # 返回一个生成器对象 print('/'.join(wordsplitList)) wordsplitListforSearch = jieba.cut_for_search(mystr) # 按搜索方式切割 print(wordsplitListforSearch) print('/'.join(wordsplitListforSearch)) 制作python岗位需求词云 import wordcloud 导入词云 from wordcloud import STOPWORDS # 停止词 import jieba import numpy as np # 科学计算 import matplotlib # 数据可视化 from matplotlib import pyplot as plt from PIL import Image # 图片处理 # 读取文本 pythonInfo = open('pythonworkinfo.txt', 'r', encoding='utf-8', errors='ignore').read() # print(pythonInfo) # 切割 pythonCut = jieba.cut(pythonInfo, cut_all=True) pythonInfoList = ' '.join(pythonCut) # 返回一个生成器对象 print(pythonInfoList) backgroud = np.array(Image.open('pig.jpg')) # 将图片格式化成RBG数组 myCloudword = wordcloud.WordCloud(font_path='simkai.ttf', # 字体路径 width=400, height=200, mask=backgroud, # 字体颜色 scale=1, # 比例 max_words=200, # 最大字数 min_font_size=4, # 最小字体 stopwords=STOPWORDS, # 默认停止词 random_state=50, # 随机角度 background_color='black', # 背景颜色 max_font_size=100 # 最大字体 ).generate(pythonInfoList) #plt.imshow(myCloudword) #plt.show() 图片展示 plt.figimage(mywordCloud) #绘制图片 plt.imsave('python.png',mywordCloud) #保存图片 精简生成词云 import matplotlib.pyplot as plt from wordcloud import WordCloud import jieba text_from_file_with_apath = open('pythonworkinfo.txt',encoding='utf-8',errors='ignore').read() print(text_from_file_with_apath) wordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all=True) wl_space_split = " ".join(wordlist_after_jieba) my_wordcloud = WordCloud().generate(wl_space_split) plt.imshow(my_wordcloud) plt.axis("off") plt.show() #注:碰到utf-8的编码问题时候,可以去源码wordcloud.py文件中新增路径,前提下好中文字体库simkai.ttf FONT_PATH = os.environ.get("FONT_PATH", os.path.join(os.path.dirname(__file__), "simkai.ttf")) 覆盖掉默认的DroidSansMono.ttf 4 Matplotlib 绘图 1 多个subplot # subplot.py import matplotlib.pyplot as plt import numpy as np data = np.arange(100, 201) plt.subplot(2, 1, 1) plt.plot(data) data2 = np.arange(200, 301) plt.subplot(2, 1, 2) plt.plot(data2) plt.show() 2 线形图 # plot.py import matplotlib.pyplot as plt plt.plot([1, 2, 3], [3, 6, 9], '-r') plt.plot([1, 2, 3], [2, 4, 9], ':g') plt.show() 这段代码说明如下: plot函数的第一个数组是横轴的值,第二个数组是纵轴的值,所以它们一个是直线,一个是折线; 最后一个参数是由两个字符构成的,分别是线条的样式和颜色。前者是红色的直线,后者是绿色的点线。 3 散点图 # scatter.py import matplotlib.pyplot as plt import numpy as np N = 20 plt.scatter(np.random.rand(N) * 100, np.random.rand(N) * 100, c='r', s=100, alpha=0.5) plt.scatter(np.random.rand(N) * 100, np.random.rand(N) * 100, c='g', s=200, alpha=0.5) plt.scatter(np.random.rand(N) * 100, np.random.rand(N) * 100, c='b', s=300, alpha=0.5) plt.show() 这段代码说明如下: 这幅图包含了三组数据,每组数据都包含了20个随机坐标的位置 参数c表示点的颜色,s是点的大小,alpha是透明度 4 饼状图 # pie.py import matplotlib.pyplot as plt import numpy as np labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] data = np.random.rand(7) * 100 plt.pie(data, labels=labels, autopct='%1.1f%%') plt.axis('equal') plt.legend() plt.show() 这段代码说明如下: data是一组包含7个数据的随机数值 图中的标签通过labels来指定 autopct指定了数值的精度格式 plt.axis('equal')设置了坐标轴大小一致 plt.legend()指明要绘制图例(见下图的右上角) 5 条形图 # bar.py import matplotlib.pyplot as plt import numpy as np N = 7 x = np.arange(N) data = np.random.randint(low=0, high=100, size=N) colors = np.random.rand(N * 3).reshape(N, -1) labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] plt.title("Weekday Data") plt.bar(x, data, alpha=0.8, color=colors, tick_label=labels) plt.show() 这段代码说明如下: 这幅图展示了一组包含7个随机数值的结果,每个数值是[0, 100]的随机数 它们的颜色也是通过随机数生成的。np.random.rand(N * 3).reshape(N, -1)表示先生成21(N x 3)个随机数,然后将它们组装成7行,那么每行就是三个数,这对应了颜色的三个组成部分。如果不理解这行代码,请先学习一下Python 机器学习库 NumPy 教程 title指定了图形的标题,labels指定了标签,alpha是透明度 6 直方图 # hist.py import matplotlib.pyplot as plt import numpy as np data = [np.random.randint(0, n, n) for n in [3000, 4000, 5000]] labels = ['3K', '4K', '5K'] bins = [0, 100, 500, 1000, 2000, 3000, 4000, 5000] plt.hist(data, bins=bins, label=labels) plt.legend() plt.show() 上面这段代码中,[np.random.randint(0, n, n) for n in [3000, 4000, 5000]]生成了包含了三个数组的数组,这其中: 第一个数组包含了3000个随机数,这些随机数的范围是 [0, 3000) 第二个数组包含了4000个随机数,这些随机数的范围是 [0, 4000) 第三个数组包含了5000个随机数,这些随机数的范围是 [0, 5000)

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册