1. 程式人生 > >python 爬蟲(xpath解析網頁,下載照片)

python 爬蟲(xpath解析網頁,下載照片)

XPath (XML Path Language) 是一門在 XML 文件中查詢資訊的語言,可用來在 XML 文件中對元素和屬性進行遍歷。

lxml 是 一個HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 資料。lxml和正則一樣,也是用 C 實現的,是一款高效能的 Python HTML/XML 解析器,我們可以利用之前學習的XPath語法,來快速的定位特定元素以及節點資訊。

lxml python 官方文件:[http://lxml.de/index.html](http://lxml.de/index.html)

需要安裝C語言庫,可使用 pip 安裝:pip install lxml (或通過wheel方式安裝)

下面的程式碼實現了抓取某個婚戀網站的圖片並儲存到本地,通過使用xpath來解析獲取圖片的連線地址,然後儲存到本地的。程式碼只實現獲取一頁的圖片,通過分析url 【http://www.qyw520.com/user/list-1-0--0-0-0-0-0-0-0-0-0-0-0-0-0---0-0-0-2.html】的變化,可以發現頁數與list後面的數字有關,如果需要回去多頁的資料,只需設定一個偏移量來控制頁碼就可以了。

import urllib.request
import random
from lxml import etree


class MySpider:

    userName = 1
    
    def headers(self):
        """
        隨機產生User-Agent的header
        :return:
        """
        headers_list = [
            "User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0",
            "User-Agent:Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)",
            "User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0)",
            "Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1",
            "Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11",
            "Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;TencentTraveler4.0)",
            "Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Maxthon2.0)",
            "Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;360SE)",
            "Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)",
        ]
        ua_agent = random.choice(headers_list)
        return ua_agent

    def load_page(self, url, header):

        headers = {"User-Agent": header}
        request = urllib.request.Request(url, headers=headers)
        response = urllib.request.urlopen(request)

        return response.read()

    def parse(self, html):
        # 解析html 為 HTML 文件
        content = html.decode("utf-8")

        selector = etree.HTML(content)
        img_links = selector.xpath('//img[@class="img"]/@src')

        for link in img_links:
            self.write_img(link)

    def write_img(self, imgurl):
        print("正在儲存檔案 %d ..." % self.userName)
        # 1. 開啟檔案,返回一個檔案物件
        with open('images/' + str(self.userName) + '.png', 'wb') as f:
            # 2. 獲取圖片裡的內容
            images = urllib.request.urlopen('http://www.qyw520.com' + imgurl)
            # 3. 呼叫檔案物件write() 方法,將圖片的內容寫入到檔案裡
            f.write(images.read())
        print("檔案 %d 儲存成功!" % self.userName)
        self.userName += 1

    def main(self, url):
        header = self.headers()
        html = self.load_page(url, header)
        self.parse(html)

if __name__ == "__main__":

    url = "http://www.qyw520.com/user/list-1-0--0-0-0-0-0-0-0-0-0-0-0-0-0---0-0-0-2.html"

    myspider = MySpider()
    myspider.main(url)


相關推薦

python 爬蟲xpath解析網頁下載照片

XPath (XML Path Language) 是一門在 XML 文件中查詢資訊的語言,可用來在 XML 文件中對元素和屬性進行遍歷。 lxml 是 一個HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 資料。lxml和正則一樣,也是用 C

python 爬蟲爬取網頁的img並下載

from urllib.request import urlopen # 引用第三方庫 import requests #引用requests/用於訪問網站(沒安裝需要安裝) from pyquery import PyQuery as pq #引用PyQuery用於 解析 # def get_url(

python實戰之網路爬蟲爬取網頁新聞資訊列表

關於大資料時代的資料探勘 (1)為什麼要進行資料探勘:有價值的資料並不在本地儲存,而是分佈在廣大的網路世界,我們需要將網路世界中的有價值資料探勘出來供自己使用 (2)非結構化資料:網路中的資料大多是非結構化資料,如網頁中的資料都沒有固定的格式 (3)非結構化資料的挖掘--ETL:即三個步

python爬蟲之BeautifulSoup解析網頁

BeautifulSoup是一個很簡單又好用的庫,不過解析速度相對比較慢,使用如下: 1,安裝 pip install bs4  (被加到了bs4中) #python3用pip3 install bs4 ,如果有許可權問題,可以試試,pip install bs4  --

Python爬蟲:Selenium常用操作下載youtube視訊例項

selenium常用操作: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait

python爬蟲Xpath

import requests  from lxml import etree  url = 'http://tieba.baidu.com/p/2166231880'  header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1

python爬蟲 selenium+phantomjs動態解析網頁加載頁面成功返回空數據

img 使用 一個 做的 ima 導數 技術分享 信息 之前 廢話不多說,直接說重點: 剛開始做的時候,代理IP,頭部信息池,都已經做好了,使用selenium+phantomjs獲取js動態加載後的源碼 起初挺好的,能出來動態加載後的源碼,但是運行了幾次之後,電腦有點卡頓

爬蟲入門爬蟲簡單的入門庫Beautifulsoup庫,解析網頁簡單用法-案例篇5

           BeautifulSoup 庫是一個非常流行的Python的模組。通過BeautifulSoup 庫可以輕鬆的解析請求庫請求的網頁,並把網頁原始碼解析為湯文件,以便過濾提取資料

Python開發爬蟲之BeautifulSoup解析網頁篇:爬取安居客網站上北京二手房數據

澳洲 pytho 目標 www. 委托 user info .get web 目標:爬取安居客網站上前10頁北京二手房的數據,包括二手房源的名稱、價格、幾室幾廳、大小、建造年份、聯系人、地址、標簽等。 網址為:https://beijing.anjuke.com/sale/

python 爬蟲 requests+BeautifulSoup 爬取簡單網頁代碼示例

utf-8 bs4 rom 文章 都是 Coding man header 文本 以前搞偷偷摸摸的事,不對,是搞爬蟲都是用urllib,不過真的是很麻煩,下面就使用requests + BeautifulSoup 爬爬簡單的網頁。 詳細介紹都在代碼中註釋了,大家可以參閱。

python爬蟲實戰:利用scrapy短短50行代碼下載整站短視頻

start mongodb efi 本地 rtp 公司 loader 右鍵 more 近日,有朋友向我求助一件小事兒,他在一個短視頻app上看到一個好玩兒的段子,想下載下來,可死活找不到下載的方法。這忙我得幫,少不得就抓包分析了一下這個app,找到了視頻的下載鏈接,幫他解決

還沒寫過爬蟲的小白點進來一文帶你入門python爬蟲小白福利

入門 準備工作 需要準備的東西: Python、scrapy、一個IDE或者隨便什麼文字編輯工具。 隨便建一個工作目錄,然後用命令列建立一個工程,工程名為miao,可以替換為你喜歡的名字。 scrapy startproject miao 隨後你會得到如下的一個由scrapy建立

python爬蟲爬取全站url完美小demo可防止連結到外網等各種強大篩選

上次完成的url爬取專案並不能滿足需求,在此完成了一個更為強大的爬取程式碼,有需要的可以直接執行,根據自己爬取的網站更改部分正則和形參即可。前排提示:執行需要耐心,因為幾千個url爬完的話,還是建議花生瓜子可樂電影準備好。 話不多說,直接上程式碼,程式碼有註釋,很容易理解。

python爬蟲xpath和lxml解析內容

上兩章說了urllib和request庫如何訪問一個頁面或者介面,從而獲取資料,如果是訪問介面,還好說,畢竟返回的json還是很好解析的,他是結構化的,我們可以把它轉化成字典來解析,但是如果返回的是xml或者html,就有點麻煩了,今天就主要說一下如果解析這些h

python爬蟲爬取淘寶羅蘭電鋼琴和雅馬哈電鋼琴參考崔大

淘寶網上有很多商品,這些商品的資訊就是一個很不錯的資料來源,於是我參考資料後依葫蘆畫瓢弄了一個爬蟲程式來爬一爬夢寐以求的電鋼琴。 宣告一下:電鋼琴和電子琴是兩種不同的琴,我在正則表示式裡面設定了只要含有電子琴這個詞語一律不抓取。同時淘寶商家的很多商品欄都是重複的,不加篩選前

python爬蟲實戰:利用scrapy短短50行程式碼下載整站短視訊

近日,有朋友向我求助一件小事兒,他在一個短視訊app上看到一個好玩兒的段子,想下載下來,可死活找不到下載的方法。這忙我得幫,少不得就抓包分析了一下這個app,找到了視訊的下載連結,幫他解決了這個小問題。 因為這個事兒,勾起了我另一個念頭,這不最近一直想把python爬蟲方面的知識梳理梳理嗎,乾脆藉機行事,正湊

解決PyCharm下python使用XPath解析html獲取文字時中文為亂碼問題

最近在學習XPath解析庫,但是獲取中文文字時總是亂碼,網上看了些教程,然並卵,最後只好自己解決: 文字檔案html.txt如下: <p class="name"> <a href="/films/1297" title="肖申克的救贖" d

python爬蟲爬取豆瓣電影_動態網頁,json解釋,中文編碼

from bs4 import BeautifulSoup import requests import json import sys import codecs reload(sys) sys.setdefaultencoding( "utf-8" ) rank

python爬蟲之反爬蟲隨機user-agent獲取代理ip檢測代理ip可用性

python爬蟲之反爬蟲(隨機user-agent,獲取代理ip,檢測代理ip可用性) 目錄 隨機User-Agent 獲取代理ip 檢測代理ip可用性            隨機User-Agent fake_useragent庫,偽

python 爬蟲模擬post請求爬取資料

import urllib.request import urllib.parse url =r"http://www.baidu.com" #將要傳送的資料合成一個字典 #字典的鍵值在網頁裡找 data = { "username":"1507", "password":"230