爬蟲的基本操做

anaconda安裝

打開瀏覽器的開發者模式--設置--更多工具--擴展程序

安裝xpath解析工具到瀏覽器擴展程序

使用xpath插件查詢元素ctrl+shif+x

獲取url地址並獲取源碼

把獲取的URL響應內容從字節轉換成字符decode

建立一個新的User-Agent

返回url的影響碼getcode

返回訪問的URL地址geturl

URL拼接

把URL響應的內容保存到本地的HTML文件(urlencode轉碼)

URL響應的內容保存到本地html(quote轉碼)

爬取三個網頁保存到本地倉庫

爬取三個網頁保存是運用多個User-Agent和延遲爬取時間,能夠增長爬取的安全性

利用函數的方法來獲取網頁

form(post)有道翻譯的抓取

貪婪匹配.和非貪婪匹配.

匹配方式分組顯示

腦筋急轉彎爬取案例

csv方式寫入對象

用cookie模擬登錄爬取我的主頁信息

request接受post提交的信息(有道翻譯)

使用代理IP訪問

爬取鏈家房源信息保存到數據庫中

爬取鏈家房源信息保存到數據庫中

爬取須要帳號密碼登陸的頁面

CA安全證書驗證verify

urllib.request的handler處理器定義urlopen方法

Handler處理器的分類

密碼管理器對象操做的實現步驟

lxml和xpath的使用






抓取百度貼吧圖片(校花吧)

import requests
from lxml import etree
import urllib.parse

class ImageSpider:
    def __init__(self):
        self.headers = {"User-Agent":"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"}
        self.baseurl = ""
        
    # 獲取全部帖子URL列表
    def getPageUrl(self,url):
        # 獲取校花吧頁面的html
        res = requests.get(url,headers=self.headers)
        res.encoding = "utf-8"
        html = res.text
        # 提取頁面中全部帖子的URL
        parseHtml = etree.HTML(html)
        t_list = parseHtml.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')
        # t_list : ["/p/32093","/p/203920","","",""]             
        for t_link in t_list:
            t_url = "http://tieba.baidu.com" + t_link
            self.getImageUrl(t_url)
    
    # 獲取每一個帖子中圖片的URL列表
    def getImageUrl(self,t_url):
        # 獲取1個帖子的響應html
        res = requests.get(t_url,headers=self.headers)
        res.encoding = "utf-8"
        html = res.text
        # 從html響應中獲取圖片URL列表
        parseHtml = etree.HTML(html)
        img_list = parseHtml.xpath('//div[@class="d_post_content j_d_post_content  clearfix"]/img/@src')
        for img_link in img_list:
            self.writeImage(img_link)
      
    # 保存圖片
    def writeImage(self,img_link):
        # 獲取每一個圖片的二進制
        res = requests.get(img_link,headers=self.headers)
        res.encoding = "utf-8"
        html = res.content
        # 保存到本地(以圖片連接的後12位做爲文件名)
        filename = img_link[-8:]
        with open(filename,"wb") as f:
            f.write(html)
            print(filename,"下載成功")

    # 主函數
    def workOn(self):
        name = input("請輸入貼吧名:")
        begin = int(input("請輸入開始頁:"))
        end = int(input("請輸入結束頁:"))
        for pn in range(begin,end+1):
            # 拼接貼吧頁面URL
            pn = (pn-1)*50
            kw = {"kw":name}
            kw = urllib.parse.urlencode(kw)
            fullurl = \
              "http://tieba.baidu.com/f?" + \
              kw + "&pn=" + str(pn)
            # 直接調類內函數
            self.getPageUrl(fullurl)
                                 
if __name__ == "__main__":
    spider = ImageSpider()
    spider.workOn()

xpath使用「 | 」能夠多路徑匹配

爬取糗事百科xpath

import requests
import pymongo
from lxml import etree

class QiushiSpider:
    def __init__(self):
        self.headers = {"User-Agent":"Mozilla/5.0"}
        # 鏈接對象
        self.conn = pymongo.MongoClient("localhost",
                                         27017) 
        # 庫對象
        self.db = self.conn["Qiushi"]
        # 集合對象
        self.myset = self.db["qiushiinfo"]

    # 獲取頁面
    def getPage(self,url):
        res = requests.get(url,headers=self.headers)
        res.encoding = "utf-8"
        html = res.text
        self.parsePage(html)

    # 解析並存入數據庫
    def parsePage(self,html):
        # 建立解析對象
        parseHtml = etree.HTML(html)
        # 獲取每一個段子的節點對象列表
        base_list = parseHtml.xpath('//div[contains(@id,"qiushi_tag_")]') 
        for base in base_list:
            # 節點對象可調用xpath
            # 用戶暱稱
            username = base.xpath('./div/a/h2')
            if len(username) == 0:
                username = "匿名用戶"
            else:
                username = base.xpath('./div/a/h2')[0].text.strip()

            # 段子內容
            content = base.xpath('.//div[@class="content"]/span')
            # 可笑數量
            laughNum = base.xpath('.//i')[0] 
            # 評論數量
            pingNum = base.xpath('.//i')[1]

            d = {
                "username":username,
                "content":content[0].text.strip(),
                "laughNum":laughNum.text,
                "pingNum":pingNum.text
                }
            self.myset.insert(d)
            print("成功")


if __name__ == "__main__":
    spider = QiushiSpider()
    spider.getPage("https://www.qiushibaike.com/8hr/page/1/")

獲取帖子中真實的URL(反爬機制)

把json格式字符串轉換爲python格式

把python格式轉換爲json格式


抓取貓眼電影時,遇到動態加載的ajax頁面時,須要抓取Query String和發送請求時的Request uRL



豆瓣電影抓取(動態頁面,ajax)

測試抓取的效果



當新安裝的spyder沒有requests庫或者其餘時使用CMD安裝(windows)


不當心關閉了ipython console窗口就重置

with open as f (打開模式)

from urllib import request 的方法來獲取HTML頁面


使用builtwith獲取網站的技術架構


python-whois查看網站全部者


staus_code獲取網站的狀態碼

URL基本格式(https://www.baidu.com)

使用fiddler4獲取某個網站的基本信息


設置headers的User-Agent

爬蟲的深度優先策略(遞歸數據結構,堆棧結構)




爬蟲的寬度(廣度)優先策略

徹底二叉樹

廣度優先遍歷

hash算法(打印成16進制,須要先編碼utf8)

hash一個文件

pymysql導入

xpath and lxml





獲取頁面中某個元素節點的匹配路徑xpayh copy


beautifulsoup





正則表達式(元字符)









list中去重元素的兩種方法、

\s\S萬能匹配符

貓眼抓取


GIL




動態爬蟲




有道詞典爬蟲


進程,線程(拷貝1000個各類類型的文件)










進程Manager

Lock的應用和傳遞



Selenium(自動化測試工具)











SSL安全套階層(https=http+ssL)

殭屍進程和孤兒進程

使用cookie模擬登錄



cookiejar和驗證碼)










二維列表



百度指數案例




日誌

關於SSL網站證書的認真問題

代理服務器




豆瓣案例

判斷兩個LIST中丟失的元素

雙向隊列和進程池


反反爬

scrapy安裝

scrapy工程















redis數據庫的簡單原理




關於安裝scrapy失敗

把爬取的數據保存到MySQL

相關文章
相關標籤/搜索