1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<code>#這個檔案的目的是抓取http://baike.baidu.com/view/2975166.htm這個百度百科上的所有圖檔,并且儲存在電腦裡。#</code>
<code># -*- coding: cp936 -*-</code>
<code>import</code> <code>os</code>
<code>from</code> <code>bs4 </code><code>import</code> <code>BeautifulSoup</code>
<code>import</code> <code>re</code>
<code>import</code> <code>requests</code>
<code>url</code><code>=</code><code>"http://baike.baidu.com/view/2975166.htm"</code>
<code>#這個網站就是python開發者那個大白胖子的百度百科#</code>
<code>AAA</code><code>=</code><code>requests.get(url)</code>
<code>BBB</code><code>=</code><code>AAA.text</code>
<code>#BBB是目标網站的源代碼文本,注意是文本!不然BS4不識别#</code>
<code>soup</code><code>=</code><code>BeautifulSoup(BBB,</code><code>"html.parser"</code><code>,from_encoding</code><code>=</code><code>"utf-8"</code><code>)</code>
<code>#這一步用BS4解析,他比正規表達式效果更好一點#</code>
<code>links</code><code>=</code><code>soup.find_all(</code><code>"img"</code><code>)</code>
<code>#定位所有以img開頭,并且以/img結尾的語句#</code>
<code>i</code><code>=</code><code>1</code>
<code>for</code> <code>each </code><code>in</code> <code>links:</code>
<code> </code><code>print</code><code>(</code><code>str</code><code>(i)</code><code>+</code><code>"is OK!"</code><code>)</code>
<code> </code><code>pic</code><code>=</code><code>requests.get(each[</code><code>"src"</code><code>])</code>
<code> </code><code>#注意!這裡用的是each["src"],因為requests.get是詢問一個網址,["src"]這是一個網址#</code>
<code> </code><code>f</code><code>=</code><code>open</code><code>(</code><code>"e:/pythonaaa/a/"</code><code>+</code><code>str</code><code>(i)</code><code>+</code><code>".jpg"</code><code>,</code><code>"wb"</code><code>)</code>
<code> </code><code>f.write(pic.content)</code>
<code> </code><code>#儲存圖檔的内容#</code>
<code> </code><code>i</code><code>=</code><code>i</code><code>+</code><code>1</code>
<code>f.close()</code>
這個程式在預設的idle 3.5裡好用,在pycharm 啟動3.5模式的狀态下卻不行,提示requests.get有問題。我很奇怪。單頁面抓圖基本就是這麼一個模式,也基本上屢試不爽。隻要換換要抓的網頁url,然後起名的時候别起1,換一個數字,就OK了。
本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1730554