pythonurllib圖片
1. python如何用urllib抓取網頁中表格的第二及後續頁面
手邊沒現成代碼,就不貼了,告訴斗腔你思路:
雖然url里祥銷鬧看著地址都一樣,其實謹罩是不一樣的,需要F12分析後台代碼;
然後有兩種方式,
就是F12分析代碼後爬取真實地址;
用py模擬敲擊「下一頁」。
具體代碼都不麻煩,度娘很好找。
2. python爬圖片報錯 [Errno 13] Permission denied: 'D:\\python\\test2'
python爬圖片報錯 [Errno 13] Permission denied: 'D:\python\test2',是代碼輸入錯誤造成的,解決方法如下:
1、首先在網頁上抓取圖片時open函數有時會報錯,如圖。
3. linux下python怎麼寫爬蟲獲取圖片
跟linux有什麼關系,python是跨平台的,爬取圖片的代碼如下:
import urllib.requestimport osimport randomdef url_open(url):
req=urllib.request.Request(url) #為請求設置user-agent,使得程序看起來更像一個人類
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0') #代理IP,使用戶能以不同IP訪問,從而防止被伺服器發現
'''iplist=['1.193.162.123:8000','1.193.162.91:8000','1.193.163.32:8000']
proxy_support=urllib.request.ProxyHandler({'http':random.choice(iplist)})
opener=urllib.request.build_opener(proxy_support)
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER')]
urllib.request.install_opener(opener)'''
response=urllib.request.urlopen(req)
html=response.read() return htmldef get_page(url):
html=url_open(url).decode('utf-8')
a=html.find('current-comment-page')+23
b=html.find(']',a) #print(html[a:b])
return html[a:b]def find_imgs(url):
html=url_open(url).decode('utf-8')
img_addrs=[]
a=html.find('img src=') while a!=-1:
b=html.find('.jpg',a,a+140) if b!=-1: if html[a+9]!='h':
img_addrs.append('http:'+html[a+9:b+4]) else:
img_addrs.append(html[a+9:b+4]) else:
b=a+9
a=html.find('img src=',b) for each in img_addrs:
print(each+'我的列印') return img_addrsdef save_imgs(folder,img_addrs):
for each in img_addrs: #print('one was saved')
filename=each.split('/')[-1] with open(filename,'wb') as f:
img=url_open(each)
f.write(img)def download_mm(folder='ooxx',pages=10):
os.mkdir(folder)
os.chdir(folder)
url=""
page_num=int(get_page(url)) for i in range(pages):
page_num=page_num-1
page_url=url+'page-'+str(page_num)+'#comments'
img_addrs=find_imgs(page_url)
save_imgs(folder,img_addrs)if __name__=='__main__':
download_mm()
完成
運行結果
4. Python3 打開一張網路圖片
不要用io.StringIO,改用io.BytesIO
5. 如何用Python爬取數據
方法/步驟
在做爬取數據之前,你需要下載安裝兩個東西,一個是urllib,另外一個是python-docx。
7
這個爬下來的是源代碼,如果還需要篩選的話需要自己去添加各種正則表達式。
6. 如何用python寫爬蟲來獲取網頁中所有的文章以及關鍵詞
所謂網頁抓取,就是把URL地址中指定的網路資源從網路流中讀取出來,保存到本地。
類似於使用程序模擬IE瀏覽器的功能,把URL作為HTTP請求的內容發送到伺服器端, 然後讀取伺服器端的響應資源。
在Python中,我們使用urllib2這個組件來抓取網頁。
urllib2是Python的一個獲取URLs(Uniform Resource Locators)的組件。
它以urlopen函數的形式提供了一個非常簡單的介面。
最簡單的urllib2的應用代碼只需要四行。
我們新建一個文件urllib2_test01.py來感受一下urllib2的作用:
import urllib2
response = urllib2.urlopen('http://www..com/')
html = response.read()
print html
按下F5可以看到運行的結果:
我們可以打開網路主頁,右擊,選擇查看源代碼(火狐OR谷歌瀏覽器均可),會發現也是完全一樣的內容。
也就是說,上面這四行代碼將我們訪問網路時瀏覽器收到的代碼們全部列印了出來。
這就是一個最簡單的urllib2的例子。
除了"http:",URL同樣可以使用"ftp:","file:"等等來替代。
HTTP是基於請求和應答機制的:
客戶端提出請求,服務端提供應答。
urllib2用一個Request對象來映射你提出的HTTP請求。
在它最簡單的使用形式中你將用你要請求的地址創建一個Request對象,
通過調用urlopen並傳入Request對象,將返回一個相關請求response對象,
這個應答對象如同一個文件對象,所以你可以在Response中調用.read()。
我們新建一個文件urllib2_test02.py來感受一下:
import urllib2
req = urllib2.Request('http://www..com')
response = urllib2.urlopen(req)
the_page = response.read()
print the_page
可以看到輸出的內容和test01是一樣的。
urllib2使用相同的介面處理所有的URL頭。例如你可以像下面那樣創建一個ftp請求。
req = urllib2.Request('ftp://example.com/')
在HTTP請求時,允許你做額外的兩件事。
1.發送data表單數據
這個內容相信做過Web端的都不會陌生,
有時候你希望發送一些數據到URL(通常URL與CGI[通用網關介面]腳本,或其他WEB應用程序掛接)。
在HTTP中,這個經常使用熟知的POST請求發送。
這個通常在你提交一個HTML表單時由你的瀏覽器來做。
並不是所有的POSTs都來源於表單,你能夠使用POST提交任意的數據到你自己的程序。
一般的HTML表單,data需要編碼成標准形式。然後做為data參數傳到Request對象。
編碼工作使用urllib的函數而非urllib2。
我們新建一個文件urllib2_test03.py來感受一下:
import urllib
import urllib2
url = 'http://www.someserver.com/register.cgi'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
data = urllib.urlencode(values) # 編碼工作
req = urllib2.Request(url, data) # 發送請求同時傳data表單
response = urllib2.urlopen(req) #接受反饋的信息
the_page = response.read() #讀取反饋的內容
如果沒有傳送data參數,urllib2使用GET方式的請求。
GET和POST請求的不同之處是POST請求通常有"副作用",
它們會由於某種途徑改變系統狀態(例如提交成堆垃圾到你的門口)。
Data同樣可以通過在Get請求的URL本身上面編碼來傳送。
import urllib2
import urllib
data = {}
data['name'] = 'WHY'
data['location'] = 'SDU'
data['language'] = 'Python'
url_values = urllib.urlencode(data)
print url_values
name=Somebody+Here&language=Python&location=Northampton
url = 'http://www.example.com/example.cgi'
full_url = url + '?' + url_values
data = urllib2.open(full_url)
這樣就實現了Data數據的Get傳送。
2.設置Headers到http請求
有一些站點不喜歡被程序(非人為訪問)訪問,或者發送不同版本的內容到不同的瀏覽器。
默認的urllib2把自己作為「Python-urllib/x.y」(x和y是Python主版本和次版本號,例如Python-urllib/2.7),
這個身份可能會讓站點迷惑,或者乾脆不工作。
瀏覽器確認自己身份是通過User-Agent頭,當你創建了一個請求對象,你可以給他一個包含頭數據的字典。
下面的例子發送跟上面一樣的內容,但把自身模擬成Internet Explorer。
(多謝大家的提醒,現在這個Demo已經不可用了,不過原理還是那樣的)。
import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()
以上就是python利用urllib2通過指定的URL抓取網頁內容的全部內容,非常簡單吧,希望對大家能有所幫助。
7. 怎麼把文件名以參數的方式傳入python腳本
作為一名從小就看籃球的球迷,會經常逛虎撲籃球及濕乎乎等論壇,在論壇裡面會存在很多精美圖片,包括NBA球隊、CBA明星、花邊新聞、球鞋美女等等,如果一張張右鍵另存為的話真是手都點疼了。作為程序員還是寫個程序來進行吧!
所以我通過Python+Selenium+正則表達式+urllib2進行海量圖片爬取。
運行效果:
http://photo.hupu.com/nba/tag/馬刺
http://photo.hupu.com/nba/tag/陳露
源代碼:
# -*- coding: utf-8 -*-
"""
Crawling pictures by selenium and urllib
url: 虎撲 馬刺 http://photo.hupu.com/nba/tag/%E9%A9%AC%E5%88%BA
url: 虎撲 陳露 http://photo.hupu.com/nba/tag/%E9%99%88%E9%9C%B2
Created on 2015-10-24
@author: Eastmount CSDN
"""
import time
import re
import os
import sys
import urllib
import shutil
import datetime
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#Open PhantomJS
driver = webdriver.PhantomJS(executable_path="G:phantomjs-1.9.1-windowsphantomjs.exe")
#driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#Download one Picture By urllib
def loadPicture(pic_url, pic_path):
pic_name = os.path.basename(pic_url) #刪除路徑獲取圖片名字
pic_name = pic_name.replace('*','') #去除'*' 防止錯誤 invalid mode ('wb') or filename
urllib.urlretrieve(pic_url, pic_path + pic_name)
#爬取具體的圖片及下一張
def getScript(elem_url, path, nums):
try:
#由於鏈接 http://photo.hupu.com/nba/p29556-1.html
#只需拼接 http://..../p29556-數字.html 省略了自動點擊"下一張"操作
count = 1
t = elem_url.find(r'.html')
while (count <= nums):
html_url = elem_url[:t] + '-' + str(count) + '.html'
#print html_url
'''
driver_pic.get(html_url)
elem = driver_pic.find_element_by_xpath("//div[@class='pic_bg']/div/img")
url = elem.get_attribute("src")
'''
#採用正則表達式獲取第3個<div></div> 再獲取圖片URL進行下載
content = urllib.urlopen(html_url).read()
start = content.find(r'<div class="flTab">')
end = content.find(r'<div class="comMark" style>')
content = content[start:end]
div_pat = r'<div.*?>(.*?)</div>'
div_m = re.findall(div_pat, content, re.S|re.M)
#print div_m[2]
link_list = re.findall(r"(?<=href=").+?(?=")|(?<=href=').+?(?=')", div_m[2])
#print link_list
url = link_list[0] #僅僅一條url鏈接
loadPicture(url, path)
count = count + 1
except Exception,e:
print 'Error:',e
finally:
print 'Download ' + str(count) + ' pictures
'
#爬取主頁圖片集的URL和主題
def getTitle(url):
try:
#爬取URL和標題
count = 0
print 'Function getTitle(key,url)'
driver.get(url)
wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='piclist3']"))
print 'Title: ' + driver.title + '
'
#縮略圖片url(此處無用) 圖片數量 標題(文件名) 注意順序
elem_url = driver.find_elements_by_xpath("//a[@class='ku']/img")
elem_num = driver.find_elements_by_xpath("//div[@class='piclist3']/table/tbody/tr/td/dl/dd[1]")
elem_title = driver.find_elements_by_xpath("//div[@class='piclist3']/table/tbody/tr/td/dl/dt/a")
for url in elem_url:
pic_url = url.get_attribute("src")
html_url = elem_title[count].get_attribute("href")
print elem_title[count].text
print html_url
print pic_url
print elem_num[count].text
#創建圖片文件夾
path = "E:\Picture_HP\" + elem_title[count].text + "\"
m = re.findall(r'(w*[0-9]+)w*', elem_num[count].text) #<a href="http://www.aspku.com/tech/jiaoben/%3Ca%20href=" tech="" jiaoben="" python="" 270537.html"="" style="background: none; border: none; padding: 0px; margin: 0px; text-decoration: none; font-family: Tahoma, Geneva, sans-serif; color: rgb(59, 89, 152);">python/95398.html">爬蟲圖片張數
nums = int(m[0])
count = count + 1
if os.path.isfile(path): #Delete file
os.remove(path)
elif os.path.isdir(path): #Delete dir
shutil.rmtree(path, True)
os.makedirs(path) #create the file directory
getScript(html_url, path, nums) #visit pages
except Exception,e:
print 'Error:',e
finally:
print 'Find ' + str(count) + ' pages with key
'
#Enter Function
def main():
#Create Folder
basePathDirectory = "E:\Picture_HP"
if not os.path.exists(basePathDirectory):
os.makedirs(basePathDirectory)
#Input the Key for search str=>unicode=>utf-8
key = raw_input("Please input a key: ").decode(sys.stdin.encoding)
print 'The key is : ' + key
#Set URL List Sum:1-2 Pages
print 'Ready to start the Download!!!
'
starttime = datetime.datetime.now()
num=1
while num<=1:
#url = 'http://photo.hupu.com/nba/tag/%E9%99%88%E9%9C%B2?p=2&o=1'
url = 'http://photo.hupu.com/nba/tag/%E9%A9%AC%E5%88%BA'
print '第'+str(num)+'頁','url:'+url
#Determine whether the title contains key
getTitle(url)
time.sleep(2)
num = num + 1
else:
print 'Download Over!!!'
#get the runtime
endtime = datetime.datetime.now()
print 'The Running time : ',(endtime - starttime).seconds
main()
8. python爬蟲大神幫忙看一下啊,使用 urllib.urlretrieve()下載不到圖片,具體圖片看下圖代碼
更改一下地址啊,因為你要下載的是圖片,所以要用圖片後綴,改成:
work_path="E:/"+str(imgname)+".jpg"
urllib.request.urlretrieve(imgurl,work_path)
這個imgname你定義一個循環的名字即可
9. 使用Python爬蟲下載圖片,得到的圖片不顯示
你需要檢查一下你的結果,看看是否請求成功了。可能伺服器返回的並不是一個圖片,但是你強制給他寫入到圖片格式文件中了,所以沒辦法顯示。
你可以通過輸出response或者使用抓包軟體來檢查。
10. python爬取圖片時候url地址是下載圖片時報錯了
你的參數可能不對,你可以加個teace來看看,在報錯的第二十二行前,看一下參數是什麼,type看一下類型再說。
希望懂的回答能幫到你
是