婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python基礎之爬蟲入門

python基礎之爬蟲入門

熱門標簽:陜西金融外呼系統 哈爾濱ai外呼系統定制 廣告地圖標注app 公司電話機器人 騰訊外呼線路 唐山智能外呼系統一般多少錢 海南400電話如何申請 白銀外呼系統 激戰2地圖標注

前言

python基礎爬蟲主要針對一些反爬機制較為簡單的網站,是對爬蟲整個過程的了解與爬蟲策略的熟練過程。
爬蟲分為四個步驟:請求,解析數據,提取數據,存儲數據。本文也會從這四個角度介紹基礎爬蟲的案例。

一、簡單靜態網頁的爬取

我們要爬取的是一個壁紙網站的所有壁紙

http://www.netbian.com/dongman/

1.1 選取爬蟲策略——縮略圖

首先打開開發者模式,觀察網頁結構,找到每一張圖對應的的圖片標簽,可以發現我們只要獲取到標黃的img標簽并向它發送請求就可以得到壁紙的預覽圖了。

隨后注意到網站不止一頁,打開前3頁的網站觀察url有沒有規律

http://www.netbian.com/dongman/index.htm#第一頁
http://www.netbian.com/dongman/index_2.htm#第二頁
http://www.netbian.com/dongman/index_3.htm#第三頁

我們發現除了第一頁其他頁數的url都是有著固定規律的,所以先構建一個含有所有頁數url的列表

url_start = 'http://www.netbian.com/dongman/'
url_list=['http://www.netbian.com/dongman/index.htm']
if not os.path.exists('./exercise'):
    os.mkdir('./exercise')
for i in range(2,133):
    url = url_start+'index_'+str(i)+'.htm'
    url_list.append(url)

至此我們的基本爬蟲策略就確定了。

網頁請求

for url in url_list:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers).text

解析數據

在這里我們選用etree解析數據

tree = etree.HTML(response)

提取數據

在這里我們選用xpath提取數據

leaf = tree.xpath('//div[@class="list"]//ul/li/a/img/@src')
for l in leaf:
      print(l)
      h = requests.get(url=l, headers=headers).content

存儲數據

i = 'exercise/' + l.split('/')[-1]
with open(i, 'wb') as fp:
      fp.write(h)

完整代碼

import requests
from lxml import etree
import os
url_start = 'http://www.netbian.com/dongman/'
url_list=['http://www.netbian.com/dongman/index.htm']
#http://www.netbian.com/dongman/index_2.htm
if not os.path.exists('./exercise'):
    os.mkdir('./exercise')
for i in range(2,133):
    url = url_start+'index_'+str(i)+'.htm'
    url_list.append(url)
print(url_list)
for url in url_list:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers).text
    tree = etree.HTML(response)
    leaf = tree.xpath('//div[@class="list"]//ul/li/a/img/@src')
    for l in leaf:
        print(l)
        h = requests.get(url=l, headers=headers).content
        i = 'exercise/' + l.split('/')[-1]
        with open(i, 'wb') as fp:
            fp.write(h)

1.2 選取爬蟲策略——高清大圖

在剛剛的爬蟲中我們爬取到的只是壁紙的縮略圖,要想爬到高清版本,就需要我們更改策略。重新打開開發者工具進行觀察,發現在原先爬取的img標簽之上還有一個href標簽,打開之后就會跳轉高清大圖。


那么此時我們的爬取策略就變成了提取這個href標簽的內容,向這個標簽中的網站發送請求,隨后在該網站中找到img標簽進行再一次請求。

我們用到了正則表達式來提取href標簽的內容。正則表達式是比xpath語法更簡便的一種數據提取方法,具體有關語法可查看以下文檔

for url in url_list:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers).text
    leaf = re.findall("desk/\d*.htm",response,re.S)
    for l in leaf:
        url = "http://www.netbian.com/"+str(l)
        h = requests.get(url=url, headers=headers).text
        leaf_ =re.findall('div class="pic">.*?(http://img.netbian.com/file/\d*/\d*/\w*.jpg)',h,re.S)

這樣輸出的leaf_就是我們要找的高清大圖的img標簽,此時我們只需要再次發送請求隨后再保存數據就可以了。

存儲數據

for l_ in leaf_:
      print(l_)
      h = requests.get(url=l_, headers=headers).content
      i = 'exercise/' + l_.split('/')[-1]
      with open(i, 'wb') as fp:
          fp.write(h)

完整代碼

import requests
import os
import re
url_start = 'http://www.netbian.com/dongman/'
url_list=['http://www.netbian.com/dongman/index.htm']
if not os.path.exists('./exercise'):
    os.mkdir('./exercise')
for i in range(2,133):
    url = url_start+'index_'+str(i)+'.htm'
    url_list.append(url)
print(url_list)
for url in url_list:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers).text
    leaf = re.findall("desk/\d*.htm",response,re.S)
    for l in leaf:
        url = "http://www.netbian.com/"+str(l)
        h = requests.get(url=url, headers=headers).text
        leaf_ =re.findall('div class="pic">.*?(http://img.netbian.com/file/\d*/\d*/\w*.jpg)',h,re.S)
        for l_ in leaf_:
            print(l_)
            h = requests.get(url=l_, headers=headers).content
            i = 'exercise/' + l_.split('/')[-1]
            with open(i, 'wb') as fp:
                fp.write(h)

    

二、動態加載網站的爬取

我們要爬取的是另一個壁紙網站的所有壁紙

https://sucai.gaoding.com/topic/9080?

2.1 選取爬蟲策略——selenium

首先打開開發者模式,觀察網頁結構,此時我們會發現一頁上的所有壁紙并不是全部都加載出來了的,也就是說隨著我們下拉滾動條,內容會不斷實時加載出來,查看網頁元素時也能看到lazy-image這個代表動態加載的標簽

由于是動態加載,因此不能用之前的直接發送請求的辦法來爬取數據了,面對這種情況我們就需要模擬瀏覽器發送一個請求,并且下拉頁面,來實現爬取一個實時加載網頁的目的。

觀察完網頁結構之后我們又來觀察頁數,這次就不多說了,想必大家也能發現規律

url_list=[]
for i in range(1,4):
    url =  'https://sucai.gaoding.com/topic/9080?p={}'.format(i)
    url_list.append(url)

網頁請求

在這里我們用到了selenium這個自動化測試框架

for url in url_list:
    driver = webdriver.Chrome()
    driver.get(url)
    driver.maximize_window()
    time.sleep(2)
    i=0
    while i10:#下拉滾動條加載頁面
        i+=1
        driver.execute_script("window.scrollBy(0,500)")
        driver.implicitly_wait(5)#顯式等待

解析提取數據

items = driver.find_elements_by_xpath("http://*[@class='gdd-lazy-image__img gdd-lazy-image__img--loaded']")
    for item in items:
            href = item.get_attribute('src')
            print(href)

至于數據的存儲只需要再請求我們爬下來的href標簽的網站就可以了。

完整代碼

from selenium import webdriver
import time
import os
if not os.path.exists('./exercise'):
    os.mkdir('./exercise')
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'
    }
url_list=[]
url_f_list=[]
for i in range(1,4):
    url =  'https://sucai.gaoding.com/topic/9080?p={}'.format(i)
    url_list.append(url)
for url in url_list:
    driver = webdriver.Chrome()
    driver.get(url)
    driver.maximize_window()
    time.sleep(2)
    i=0
    while i10:
        i+=1
        driver.execute_script("window.scrollBy(0,500)")
        driver.implicitly_wait(5)#顯式等待
    items = driver.find_elements_by_xpath("http://*[@class='gdd-lazy-image__img gdd-lazy-image__img--loaded']")
    for item in items:
            href = item.get_attribute('src')
            print(href)

2.2 選取爬蟲策略——api

眾所周知,api接口是個好東西,如果找到了它,我們就無需擔心動態加載,請求api返回給我們的是json格式的字典,里面或許有我們需要的東西也說不定。那么我們重新打開開發者工具搜索一番吧!

從Element切換到Network我們可以發現這里多了好多奇怪的東西,但是打開preview好像沒有我們能用到的。

這個時候別灰心,切換下頁面,等第二頁加載出來的時候最后又多出來了一個xhr文件,點開preview我們驚喜的發現,這個里面有每一張圖id的信息!

搜尋一圈發現字典里有效的只有id這個值,那么id對于我們的圖片爬取有什么意義呢?通常情況下網址+id就可以定位到具體的圖片,于是我點進去一張壁紙,驚喜的發現跟我想的一樣!

最后又到了我們老生常談的頁數環節,在看到這個api的request url之后大家有沒有觀察到它其中帶著page_num=2page_size=100這兩個看著很像頁碼的參數呢?我們再往下就看到了參數中也正好有這兩個值!也就是說我們只需要更改page_num=2就可以實現翻頁了!

url='https://api-sucai.gaoding.com/api/csc-api/topics/9080/modules/18928/templets?'
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
params_list=[]
for i in range(1,4):
    parms ={
        'page_num': i,
        'page_size': 100
    }
    params_list.append(parms)

解析提取數據

for param in params_list:
    response = requests.get(url=url,params=param,headers=headers).json()
    for i in range(100):
        try:
            dict  =response[i]
            id = dict['id']
            url_f = 'https://sucai.gaoding.com/material/'+str(id)
            url_f_list.append(url_f)
        except:
            pass

存儲數據

for l in url_f_list:
    print(l)
    h = requests.get(url=l, headers=headers).content
    i = 'exercise/' + l.split('/')[-1]
    with open(i, 'wb') as fp:
        fp.write(h)

完整代碼

import os
import requests
if not os.path.exists('./exercise'):
    os.mkdir('./exercise')
url='https://api-sucai.gaoding.com/api/csc-api/topics/9080/modules/18928/templets?'
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
params_list=[]
url_f_list=[]
for i in range(1,4):
    parms ={
        'page_num': i,
        'page_size': 100
    }
    params_list.append(parms)
for param in params_list:
    response = requests.get(url=url,params=param,headers=headers).json()
    for i in range(100):
        try:
            dict  =response[i]
            id = dict['id']
            url_f = 'https://sucai.gaoding.com/material/'+str(id)
            url_f_list.append(url_f)
        except:
            pass
for l in url_f_list:
    print(l)
    #h = requests.get(url=l, headers=headers).content
    #i = 'exercise/' + l.split('/')[-1]
    #with open(i, 'wb') as fp:
    #    fp.write(h)

三、selenium模擬登錄

我們要爬取的網站總是免不了登錄這一關鍵環節,因此模擬登錄也是一大爬蟲基礎。
我們要模擬登錄的網站如下

https://www.icourse163.org/course/BIT-268001

選取爬蟲策略

既然我們是用selenium模擬登陸,首先肯定要明確我們要模擬的具體內容,歸納起來就是

點擊 登錄|注冊
點擊 其他登陸方式
點擊 手機號登錄
輸入賬號
輸入密碼
點擊 登錄

在明確該干些什么之后我們就打開開發者模式觀察一下這個登錄框吧。

不看不知道,一看嚇一跳,原來這里有一個iframe框架,這就意味著如果我們不做任何處理就查找元素的話可能會什么都查找不到。這就相當于在王家找李家的東西一樣,我們首先需要切換到當前iframe

driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="j-ursContainer-1"]/iframe'))

經過這一操作之后我們就可以正常按部就班的進行模擬登陸了!

完整代碼

from selenium import webdriver
import time
url = 'https://www.icourse163.org/course/BIT-268001'
driver = webdriver.Chrome()
driver.get(url)
driver.maximize_window()
#time.sleep(2)
driver.find_element_by_xpath('//div[@class="unlogin"]/a').click()
driver.find_element_by_class_name('ux-login-set-scan-code_ft_back').click()
driver.find_element_by_xpath('//ul[@class="ux-tabs-underline_hd"]/li[2]').click()
driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="j-ursContainer-1"]/iframe'))
driver.implicitly_wait(2)#給登錄框一些加載的時間
driver.find_element_by_css_selector('input[type="tel"]').send_keys('15201359153')
driver.find_element_by_css_selector('input[class="j-inputtext dlemail"]').send_keys('Asdasd123')
driver.implicitly_wait(2)#如果不等待的話可能密碼還沒輸入結束就點按登錄鍵了
driver.find_element_by_id('submitBtn').click()

到此這篇關于python基礎之爬蟲入門的文章就介紹到這了,更多相關python入門爬蟲內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python爬蟲數據的分類及json數據使用小結
  • python爬蟲scrapy圖書分類實例講解
  • Python爬蟲實現的根據分類爬取豆瓣電影信息功能示例
  • Python異步爬蟲實現原理與知識總結
  • Python爬蟲之線程池的使用
  • python爬蟲請求庫httpx和parsel解析庫的使用測評
  • Python爬蟲之爬取最新更新的小說網站
  • 用Python爬蟲破解滑動驗證碼的案例解析
  • Python爬蟲基礎之爬蟲的分類知識總結

標簽:四川 益陽 黔西 惠州 鷹潭 黑龍江 上海 常德

巨人網絡通訊聲明:本文標題《python基礎之爬蟲入門》,本文關鍵詞  python,基礎,之,爬蟲,入門,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python基礎之爬蟲入門》相關的同類信息!
  • 本頁收集關于python基礎之爬蟲入門的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩在线直播| 国产精品一卡二卡在线观看| 亚洲欧美电影院| 大桥未久av一区二区三区中文| 成人美女视频在线看| 91精品1区2区| 国产三级精品三级在线专区| 精品在线免费观看| 欧美tickling网站挠脚心| 天天影视涩香欲综合网| www.亚洲色图| 国产精品久久99| 顶级嫩模精品视频在线看| 国产精品久久久久久久第一福利| 99久久精品免费看国产| 一区二区三区久久| 欧美一级午夜免费电影| 国产精品456| 一区二区三区中文字幕在线观看| 在线免费观看日本一区| 欧美bbbbb| 国产精品久久久久久久蜜臀| 欧美影院一区二区| 韩国成人在线视频| 一区二区三区在线播放| 制服丝袜激情欧洲亚洲| 成人性生交大片免费看中文网站| 最新国产成人在线观看| 日韩欧美亚洲国产精品字幕久久久| 国产精品99久久久久| 一区二区三区四区乱视频| 日韩欧美在线影院| 99re66热这里只有精品3直播| 蜜桃久久久久久久| 麻豆精品一区二区综合av| 免费在线看一区| 国产乱码字幕精品高清av | 色婷婷综合视频在线观看| 亚洲成人资源网| 欧美va亚洲va| 日本aⅴ亚洲精品中文乱码| 久久精品视频在线免费观看| 欧美日产在线观看| 天天色图综合网| 自拍偷拍亚洲综合| 久久蜜桃香蕉精品一区二区三区| 色先锋aa成人| 国产成人免费视频网站| 日韩精品成人一区二区在线| 国产精品久久久久久久久久免费看| 色先锋资源久久综合| 成人av资源网站| 久久亚洲欧美国产精品乐播| 久久丝袜美腿综合| 欧美日韩国产另类不卡| 久久精品久久精品| 亚洲欧美日韩中文播放| 精品播放一区二区| 91精品国产日韩91久久久久久| 91欧美一区二区| 欧美三级电影一区| 欧美日韩亚洲综合| 最新高清无码专区| 国产精品国产三级国产aⅴ入口 | 亚洲乱码精品一二三四区日韩在线| 日韩一区二区影院| 欧美日韩精品一区二区三区| 欧美亚州韩日在线看免费版国语版| 国产高清视频一区| 福利91精品一区二区三区| 国产乱人伦偷精品视频免下载| 狂野欧美性猛交blacked| 日本欧美一区二区三区乱码 | 色婷婷国产精品| 777午夜精品视频在线播放| 欧美系列一区二区| 欧美情侣在线播放| 日韩亚洲电影在线| xf在线a精品一区二区视频网站| 欧美成人一区二区三区在线观看| 日韩精品一区二区三区四区视频| 精品国产免费人成在线观看| 99久久精品免费看国产| 欧洲一区在线观看| 日韩三级高清在线| 欧美一区二区久久久| 在线播放欧美女士性生活| 日韩小视频在线观看专区| 久久日韩精品一区二区五区| 国产喷白浆一区二区三区| 中文字幕高清不卡| 亚洲精品videosex极品| 日韩精品视频网站| 国产成人精品免费一区二区| 蜜臀av一区二区三区| 国产伦精品一区二区三区免费| 国产成人一区二区精品非洲| 国产福利一区在线| 欧美日韩一区不卡| 精品国产乱码久久久久久免费| 国产精品美女一区二区三区 | 免费精品视频在线| 亚洲自拍偷拍麻豆| 成人动漫精品一区二区| 精品一区二区三区久久| av亚洲产国偷v产偷v自拍| 色视频一区二区| 欧美zozozo| 国产女人18毛片水真多成人如厕 | 91麻豆精品国产91久久久久久久久 | 成人短视频下载| 91精品免费观看| 亚洲视频 欧洲视频| 国产综合久久久久久久久久久久| 91豆麻精品91久久久久久| 久久久久久久久蜜桃| 日本午夜精品视频在线观看| 一本大道久久a久久精品综合| 欧美日韩国产一级| 伊人一区二区三区| 成人av网址在线观看| 久久久久久久久久久久久女国产乱| 欧美中文字幕一区| 麻豆精品国产传媒mv男同| 国产成人综合网站| 色综合视频在线观看| 久久久精品tv| 亚洲欧洲精品一区二区三区| 日韩在线一区二区| 成人精品电影在线观看| 在线综合+亚洲+欧美中文字幕| 1000精品久久久久久久久| 精品一区二区免费视频| 色综合久久久久久久久| 欧美国产日韩精品免费观看| 蜜桃精品视频在线| 99久久精品国产导航| 国产精品福利一区二区| 日韩不卡一区二区| 69av一区二区三区| 日韩av二区在线播放| 欧美日韩国产一二三| 一区二区三区四区乱视频| 色婷婷久久久亚洲一区二区三区 | 懂色av一区二区三区免费看| 91精品在线观看入口| 亚洲柠檬福利资源导航| 成人天堂资源www在线| 国产欧美日本一区视频| 成人国产免费视频| 亚洲一二三区视频在线观看| 99精品在线观看视频| 国产精品蜜臀av| 91丨porny丨在线| 18成人在线观看| 欧美视频在线一区| 日韩国产高清影视| 日韩视频在线观看一区二区| 蜜臀av一区二区在线观看| 久久久噜噜噜久久人人看| 国产成人在线影院| 亚洲精品免费一二三区| 7777精品伊人久久久大香线蕉超级流畅 | 国产一区二区调教| 国产精品你懂的| 欧美挠脚心视频网站| 国产综合色在线| 亚洲综合丁香婷婷六月香| 欧美成人艳星乳罩| jizzjizzjizz欧美| 婷婷成人激情在线网| 2020国产精品自拍| 久久99精品网久久| 亚洲天堂中文字幕| 日韩你懂的在线观看| 97久久精品人人爽人人爽蜜臀| 亚洲www啪成人一区二区麻豆| 日韩欧美成人午夜| 99视频超级精品| 黑人精品欧美一区二区蜜桃 | 精品国产91亚洲一区二区三区婷婷| 亚洲成人激情自拍| 欧美另类高清zo欧美| 国产成人免费在线| 免费人成黄页网站在线一区二区| 国产精品美女久久久久av爽李琼 | 制服丝袜av成人在线看| 精品一区二区国语对白| 亚洲精品日韩综合观看成人91| 精品免费99久久| 欧美亚洲一区二区在线| www.久久精品| 国产成人免费av在线| 蜜臀av一区二区三区| 亚洲成人综合视频| 亚洲视频资源在线| 国产欧美中文在线| 久久久亚洲精品石原莉奈| 337p亚洲精品色噜噜噜| eeuss影院一区二区三区|