自学Python 之爬虫

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

这几天好不容易才静下心来学点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来说 语法确实简单不少。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容

  • Python 二三事 面向初学者介绍Python相关的一些工具,以及可能遇到的常见问题。 最后更新 2013.5....
    hzyido阅读 67,758评论 2 42
  • 引言 在这里我假设你已经看完了一篇Python教程,基本熟悉了Python的结构和语法,在命令行下的Python互...
    Programmer客栈阅读 65,133评论 0 17
  • (这是很早之前写的但内容没有太过时,发到这边补全一下...)面向初学者介绍Python相关的一些工具,以及可能遇到...
    jagttt阅读 67,290评论 3 44
  • 平淡的生活总是需要波澜才精彩。 今天的来到的是广州的雕塑公园,来到一个文艺的地方,仿佛自己就是一个文艺小清新。大自...
    一朵野菊阅读 718评论 0 0
  • 闲言哈苏阅读 161评论 0 0