python爬虫(机器学习数据集的制作方式之一)
好多python学习的书籍,最后一章,都会以python爬虫作为收尾的考核学习。
在我看来,这个只是机器学习的开始。
因为现在主流的 统计机器学习,都是需要训练集的。而训练集的收集,除了在网上找一些别人已经收集好的。还需要自己能够收集数据!
自己的训练网络,自己的数据适应性肯定是最好的。如果用别人的 训练集,还得按照别人的训练集是否有Label ,来确定自己是否为有监督模型。 总之!自己收集自己想要的数据集才是王道!
那爬虫是如何运作的呢?
先解释我们现在的浏览器的运作流程和简单原理:
1.首先你的电脑的浏览器,看作是客户端(信息使用者)
2.而你想访问的网址,他的 信息储存的地方是 服务端(信息管理者)
3.当你填入网址的时候,就是由客户端向服务端发送申请。
4.服务端审核申请,如果符合条件,就将信息发送给客户端。 (信息是该网站的源代码——html代码)
5.本地浏览器解释翻译HTML代码,然后转换成我们看的懂的 形式呈现出来。
爬虫的原理与其类似,网络爬虫——web spider。就好比一个蜘蛛,可以爬向蛛网的 一个节点,然后可以从该节点爬到和其链接的所有节点。
所以爬虫的流程如下:
1.找出初始网址的 地址,获取其源代码。然后可以从该网站源代码中,访问其中包含的其他网站,然后获取他们的源代码。如此循环。(有权限的 情况下)
2.然后根据你做输入的 表格,来对你所获得的信息加以筛选和处理。
python爬虫所需要的库 urllib2(python2), urllib2(python3),beautifulsoap(早就没有在更新库),bs4(beautifulsoap4即前者升级版),re库(正则化方式,较为落后,没有bs4方便,但是好多BS4满足不了的地方,他可以满足。可以学习一哈)
具体的学习网站在这里:
urllib- python2: https://docs.python.org/3/howto/urllib2.html
urllib -python3: https://docs.python.org/2/howto/urllib2.html
bs4-python: http://www.jb51.net/article/65287.htm
re-python : https://www.cnblogs.com/vamei/archive/2012/08/31/2661870.html
下面是我的学习心得:
第一步:打开一个自己想要爬的网站,网址如下(随便找了一个某宝iwatch):https://s.taobao.com/search?q=%E8%8B%B9%E6%9E%9C%E6%89%8B%E8%A1%A8&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306
第二步: 右键点击打开 “检查”:
此步骤可以看到 HTML源代码,和各属性状况。
第三步:点击network ,然后点击第一个文件
可以看到一些类似如下数据:
可以看到 Request URL , Remote Address等 。如果你想要这些列表中的文件,便可以用urlopen来获取该url下的数据了大概可以用如下代码:
import urllib.request req=urllib.request.Request('https://g-search1.alicdn.com/img/bao/uploaded/i4') try: urllib.request.urlopen(req) except urllib.request.URLError as e: # URL请求错误 print(e.reason)
BUT!!我确失败了,在上述代码信息中,第一个文件的request url 是:https://g-search1.alicdn.com/img/bao/uploaded/i4/imgextra/i1/16681881/TB2.puxenTI8KJjSsphXXcFppXa_!!0-saturn_solar.jpg_180x180.jpg_.webp
而这个却没有申请成功,返回的是NOT FOUND 也就是说 可能是没有权限??
用这个URL:https://g-search1.alicdn.com/img/bao/uploaded/i4
他会下载一个二进制文件,本人猜测可能是他们的目录或者是地址信息吧。
总之,这一步得到的信息,即使不能爬出什么文件,也可以得到一些有用的信息,例如:远程地址,和是GET到的信息还是POST到的。
第四步:查看源代码找规律!
这是HTML源代码的一部分,我们可以看得很清楚,当前<script>下的红色字样,里面有我所需要的那些信息,比如:店的位置——江苏南京 ,店的名字——苦工的店......。
实现代码如下:
#-*-coding:utf8-*- import requests import urllib.request import re url='https://s.taobao.com/search?q=%E8%8B%B9%E6%9E%9C%E6%89%8B%E8%A1%A8&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306' try: responses = requests.post(url) responses2 = re.findall('<script>(.*?)</script>', responses.text, re.S) for res in responses2: print(res) #输出<script>之内所有的东西 responses3 = re.findall('item_loc":"(.*?)","view_sales', str(responses2), re.S) #爬出淘宝店的地址 print('地址如下:') for response in responses3: print(response) print('1234') except urllib.request.URLError as e: # URL请求错误
跑出来了一部分店的地址,但是没有全部跑出来。不过原理大致如此,希望对大家有帮助!!!
欢迎评论和分享一些心得!!