美文网首页程序员
自学Python 之爬虫

自学Python 之爬虫

作者: YW_Drenched | 来源:发表于2017-09-14 13:46 被阅读132次

话说好长时间没写写东西了;人啊;懒起来自己都怕。

这几天好不容易才静下心来学点Python,自己在网上找资料看;自己装环境;自己装IDE;然后对爬虫比较感兴趣;就花了点时间研究下;今天终于算是有点小成果;爬了点图下来。那么;废话不多说;进入主题哈。(此文主要献给跟我一样的小白,有啥错误还望指正)

一.Python的环境、IDE
1.1Python环境

在Window下 可以用anaconda点我下载。这是一个Python的科学计算发行版本,作者打包好多好多的包, 不知道干啥的没关系,你只需要知道拥有它之后,那些Windows下pip安装包报错的问题将不复存在

Mac系统自带Python,但是只有2.几的。不知道是多少的可以进终端查看

chenyouwendeiMac:Desktop chenyouwen$ python
Python 2.7.10 (default, Feb  7 2017, 00:08:15) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

如果想装3.x以上的 点我飞过去,装好了的话 ,再进终端看下 直接打pyhton3就OK了

chenyouwendeiMac:Desktop chenyouwen$ python 3
python: can't open file '3': [Errno 2] No such file or directory
chenyouwendeiMac:Desktop chenyouwen$ python3
Python 3.5.0 (v3.5.0:374f501f4567, Sep 12 2015, 11:00:19) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

Linux的话只用过乌班图好像也是自带Python环境的,这里就不详细介绍了。。。

1.2 IDE的选择

本人用的是PyCharm,Mac版本的传送门 提醒一点,最好选择社区版的因为免费😄

1.3Python版本选择

在PyCharm和Python环境全部装好了之后,就可以切换Python的版本了。

在File中选择Defaluts Setting 这里就可以选择版本了
二.需要导入的库

2.1 beautifulsoup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.点我查看官方文档

Snip20170914_5.png Snip20170914_6.png

2.2Requests urllib的升级版本打包了全部功能并简化了使用方法(点我查看官方文档

当然你也可以直接用pip导入,一般安装了Python 都可以直接pip的,如果pip不了,试试下面这句话

sudo easy_install pip
三.完事具备 只欠东风

导入库

import requests
from bs4 import BeautifulSoup
import os

配置header 和url
header中的配置信息可以在浏览器中的元素找到,谷歌火狐都行

Snip20170914_7.png
def mian():
    headers = {
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0",
        #可加可不加,因为有的网站做了反爬的
        # "Host":"unsplash.com",
        # "Referer":"https://unsplash.com/"
    }
    main_page_url = "http://www.chinanews.com/scroll-news/mil/2017/0110/news.shtml" #要爬的网站

接下来就是使用requests库了

#选择get请求,然后参数直接填,是不是很简单
main_page_result = requests.get(main_page_url, headers = headers)
#打印结果
print(main_page_result.content.decode("gbk"))

打印结果如图

Snip20170914_9.png

在接着就是我们的BeautifulSuop了

#使用BeautifulSoup来解析我们获取到的网页(‘lxml’是指定的解析器 具体请参考官方文档哦)
main_suop = BeautifulSoup(main_page_result.content.decode("gbk"),"lxml")
#使用BeautifulSoup解析网页过后就可以用找标签呐!(find_all是查找指定网页内的所有标签的意思,find_all返回的是一个列表。)
main_suop_a = main_suop.find("div",attrs={"class":"tpo"}).find_all("a")
#列表切片,因为最后有一个数据用不到
main_suop_a = main_suop_a[:-1]

print(main_suop_a)

打印结果如下

打印结果

接下来遍历这个列表哈

a_text = a.get_text()#获取a标签中的值
a_href = "http:" + a["href"]#获取a标签中的href值,并拼接http
   #这里因为取到了a标签中所有的值,但是网页上有的是不需要的,并且其中的值为空,所以在这里加了一个判断用来筛选(我感觉我还是对BeautifulSuop运用不熟,导致没有筛选好 )
   if a_text != "":
      a_href_result = requests.get(a_href,headers)#用requests对取到的a标签中的href做get请求
      a_href_suop = BeautifulSoup(a_href_result.content.decode("gbk"),"lxml")#跟上面的BeautifulSuop用法一样

      os.makedirs(os.path.join("/Users/chenyouwen/Desktop/xinwen/", a_text))#创建一个存放套图的文件夹
      os.chdir("/Users/chenyouwen/Desktop/xinwen/" + a_text)#切换到上面创建的文件夹

     
      all_img_url = a_href_suop.find("ul", attrs={"id": "scrool_wrap"}).find_all("img")#找到img标签

找到img标签之后再遍历一次就大功告成了

  for img_url in all_img_url:

      img_src = img_url["src"]#得到img中的src
      img_name = img_src[-20:-4]#切片后作为图片的名字
      img = requests.get(img_src,headers)#用requests做get请求 跟上面的一个道理

      f = open(img_name + ".jpg","ab")#写入多媒体文件必须要 b 这个参数!!必须要!!
      f.write(img.content)#多媒体文件要是用conctent
      f.close()

如果成功的运行的话 就应该是这个样子的


Snip20170914_12.png

下面是完整的代码

import requests
from bs4 import BeautifulSoup
import os

#coding = utf-8

def mian():
    headers = {
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0",
        # "Host":"unsplash.com",
        # "Referer":"https://unsplash.com/"
    }
    main_page_url = "http://www.chinanews.com/scroll-news/mil/2017/0110/news.shtml"
    main_page_result = requests.get(main_page_url, headers = headers)
    main_suop = BeautifulSoup(main_page_result.content.decode("gbk"),"lxml")
    main_suop_a = main_suop.find("div",attrs={"class":"tpo"}).find_all("a")
    main_suop_a = main_suop_a[:-1]
    print(main_suop_a)


    for a in  main_suop_a:
        a_text = a.get_text()
        a_href = "http:" + a["href"]

        if a_text != "":
            a_href_result = requests.get(a_href,headers)
            a_href_suop = BeautifulSoup(a_href_result.content.decode("gbk"),"lxml")
            os.makedirs(os.path.join("/Users/chenyouwen/Desktop/xinwen/", a_text))
            os.chdir("/Users/chenyouwen/Desktop/xinwen/" + a_text)
            # img_count = a_href_suop.find("span",attrs={"id":"showTotal"}).get_text()
            all_img_url = a_href_suop.find("ul", attrs={"id": "scrool_wrap"}).find_all("img")


            for img_url in all_img_url:
                img_src = img_url["src"]
                img_name = img_src[-20:-4]
                img = requests.get(img_src,headers)

                f = open(img_name + ".jpg","ab")
                f.write(img.content)
                f.close()

mian()

总共下来其实也就不到50行代码,但是自己敲起来效率是真的低。语法跟OC区别有点大的,每次打字符串总是亲不自禁的加@😓。不过相比OC来说 语法确实简单不少。

相关文章

网友评论

    本文标题:自学Python 之爬虫

    本文链接:https://www.haomeiwen.com/subject/bigrsxtx.html