【練習(xí)】分析Ajax請求并抓取今日頭條街拍美圖

【目錄】2019-04-02

image.png

第一部分:前言

一、所需工具(4個)

jupyter notebook(單進程用)、mongodb(存儲數(shù)據(jù)用)魄眉、studio-3t(查看數(shù)據(jù)用)、sublime(多進程用)

二、主要知識點(4個)

urlib庫队腐、requests庫、BeautifulSoup庫奏篙、正則表達式(很少)

三柴淘、操作流程(3個階段)
  • 1、單個模塊運行:單個方法模塊調(diào)試通暢秘通,保證子程序沒有問題
  • 2为严、單進程運行:參數(shù)寫死,請求一個圖集的結(jié)果
  • 3肺稀、多進程運行:參數(shù)可變第股,請求多個圖集的結(jié)果

第二部分:正文

一、分析目標網(wǎng)站(4個關(guān)鍵問題)

1话原、確認數(shù)據(jù)是怎么加載的--找到ajax文件


image.png

2夕吻、找到各個圖集的區(qū)別--發(fā)現(xiàn)offset變化規(guī)律
下拉加載,依次點擊XHR文件查看繁仁,看到offset變化規(guī)律:0,20,40.....


image.png

3涉馅、定位詳情頁鏈接--在哪里?
各種嘗試后黄虱,發(fā)現(xiàn)詳情頁鏈接在article_url這個參數(shù)中


image.png

4控漠、定位圖片鏈接--在哪里?
preview的源代碼中可以發(fā)現(xiàn),BASE_DATA.galleryInfo里面gallery這個參數(shù)中就含有url鏈接盐捷。測試一下偶翅,copy其中的一個url:消除“\\”后訪問,發(fā)現(xiàn)就是圖集中圖片碉渡。
gallery中copy一個url:http://pb3.pstatp.com/origin/dfic-imagehandler/7e8da4a8-dad7-4951-bf81-78988fae40bb

image.png
二聚谁、設(shè)定思路步驟(9個步驟)

1、載入必要的包

# 1.導(dǎo)入必要的庫:
import requests  #請求網(wǎng)頁用
from requests.exceptions import RequestException  #做requests的異常處理
from urllib.parse import urlencode  #url編碼用
from bs4 import BeautifulSoup  #網(wǎng)頁解析用
import urllib  #請求網(wǎng)頁用
import json  #格式轉(zhuǎn)換用
import re  #正則表達式用
import pymongo  #連接數(shù)據(jù)庫用
import os #路徑相關(guān)的函數(shù)
from hashlib import md5  #圖片命名用
from multiprocessing import Pool  #建立多進程用

2滞诺、請求索引頁

# 1.導(dǎo)入必要的庫:
import requests  #請求網(wǎng)頁用
from requests.exceptions import RequestException  #做requests的異常處理
from urllib.parse import urlencode  #url編碼用
from bs4 import BeautifulSoup  #網(wǎng)頁解析用
import urllib  #請求網(wǎng)頁用
import json  #格式轉(zhuǎn)換用
import re  #正則表達式用
import pymongo  #連接數(shù)據(jù)庫用
import os #路徑相關(guān)的函數(shù)
from hashlib import md5  #圖片命名用
from multiprocessing import Pool  #建立多進程用

keyword='街拍圖片'
offset=0

#放在全局中形导,不要放在方法中,不然每次請求要重復(fù)寫headers參數(shù)习霹。
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)","Referer":"https://www.toutiao.com/"}

# 2.獲取索引頁并分析:
def get_page_index(offset, keyword):
    data = {
        'offset': offset,
        'format': 'json',
        'keyword':  keyword,
        'autoload': 'true',
        'count': 20,
        'cur_tab': 1,   # cur_tab為3指的是圖集板塊朵耕,數(shù)過來第三個,若為1則指代綜合板塊
        'from': 'search_tab'
    }
    url = 'https://www.toutiao.com/api/search/content/?' + urlencode(data)  
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        print('請求索引頁錯誤')
        return None

#8、定義一個主函數(shù)淋叶,調(diào)用之前的方法
def main(offset):
    html=get_page_index(offset,keyword)
    print(html)
 
# 9阎曹、只運行本文件中的主函數(shù)
if __name__=='__main__':
    main(offset)

預(yù)期結(jié)果:返回結(jié)果跟索引頁的preview中一致


image.png

3、解析索引頁煞檩,得到詳情頁url

# 1.導(dǎo)入必要的庫:
import requests  #請求網(wǎng)頁用
from requests.exceptions import RequestException  #做requests的異常處理
from urllib.parse import urlencode  #url編碼用
from bs4 import BeautifulSoup  #網(wǎng)頁解析用
import urllib  #請求網(wǎng)頁用
import json  #格式轉(zhuǎn)換用
import re  #正則表達式用
import pymongo  #連接數(shù)據(jù)庫用
import os #路徑相關(guān)的函數(shù)
from hashlib import md5  #圖片命名用
from multiprocessing import Pool  #建立多進程用

keyword='街拍圖片'
offset=20

#放在全局中处嫌,不要放在方法中,不然每次請求要重復(fù)寫headers參數(shù)斟湃。
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)","Referer":"https://www.toutiao.com/"}

# 2.獲取索引頁并分析:
def get_page_index(offset, keyword):
    data = {
        'offset': offset,
        'format': 'json',
        'keyword':  keyword,
        'autoload': 'true',
        'count': 20,
        'cur_tab': 1,   # cur_tab為3指的是圖集板塊熏迹,數(shù)過來第三個,若為1則指代綜合板塊
        'from': 'search_tab'
    }
    url = 'https://www.toutiao.com/api/search/content/?' + urlencode(data)  #url寫錯,卡了3天啊
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        print('請求索引頁錯誤')
        return None

# 3凝赛、解析索引頁內(nèi)容
# 分析ajax請求的返回結(jié)果注暗,拿到詳情頁的url
def parse_page_index(html):
    data = json.loads(html) # 加載返回的json數(shù)據(jù)
    if data and 'data' in data.keys():  #確保返回的信息中含有data這個信息
        for item in data.get('data'):
            yield item.get('article_url') #構(gòu)造一個生成器

#8、定義一個主函數(shù)墓猎,調(diào)用之前的方法
def main(offset):
    html=get_page_index(offset,keyword)
    for url in parse_page_index(html):  #返回的是一個迭代器友存,每次輸出一個網(wǎng)址
        print(url)
 
# 9、只運行本文件中的主函數(shù)
if __name__=='__main__':
    main(offset)

預(yù)期結(jié)果:詳情頁的url


image.png

4陶衅、請求詳情頁
5、解析詳情頁直晨,得到目標圖片的url

# 1.導(dǎo)入必要的庫:
import requests  #請求網(wǎng)頁用
from requests.exceptions import RequestException  #做requests的異常處理
from urllib.parse import urlencode  #url編碼用
from bs4 import BeautifulSoup  #網(wǎng)頁解析用
import urllib  #請求網(wǎng)頁用
import json  #格式轉(zhuǎn)換用
import re  #正則表達式用
import pymongo  #連接數(shù)據(jù)庫用
import os #路徑相關(guān)的函數(shù)
from hashlib import md5  #圖片命名用
from multiprocessing import Pool  #建立多進程用

keyword='街拍圖片'
offset=20

#放在全局中搀军,不要放在方法中,不然每次請求要重復(fù)寫headers參數(shù)勇皇。
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)","Referer":"https://www.toutiao.com/"}

# 2.獲取索引頁并分析:
def get_page_index(offset, keyword):
    data = {
        'offset': offset,
        'format': 'json',
        'keyword':  keyword,
        'autoload': 'true',
        'count': 20,
        'cur_tab': 1,   # cur_tab為3指的是圖集板塊罩句,數(shù)過來第三個,若為1則指代綜合板塊
        'from': 'search_tab'
    }
    url = 'https://www.toutiao.com/api/search/content/?' + urlencode(data)  #url寫錯,卡了3天啊
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        print('請求索引頁錯誤')
        return None

# 3敛摘、解析索引頁內(nèi)容
# 分析ajax請求的返回結(jié)果门烂,拿到詳情頁的url
def parse_page_index(html):
    data = json.loads(html) # 加載返回的json數(shù)據(jù)
    if data and 'data' in data.keys():  #確保返回的信息中含有data這個信息
        for item in data.get('data'):
            yield item.get('article_url') #構(gòu)造一個生成器

# 4、請求詳情頁的內(nèi)容
def get_page_detail(url):
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        print('詳情頁頁錯誤', url)
        return None

# 5、解析詳情頁的內(nèi)容
def parse_page_detail(html,url):
    try:
        soup = BeautifulSoup(html, 'lxml')  #解析詳情頁的內(nèi)容
        title = soup.select('title')[0].get_text()  #獲取文章title
        images_pattern = re.compile('gallery: JSON.parse\("(.*?)"\)',re.S) #確定匹配模式
        result = re.search(images_pattern,html) #匹配內(nèi)容
        str=re.sub(r'(\\)','',result.group(1)) #去掉url鏈接中防作弊的多余的雙斜線“\\”
        if str:                         #如果匹配到內(nèi)容屯远,執(zhí)行接下來的操作
            data = json.loads(str)
            if data and 'sub_images' in data.keys():  #確保返回的信息中含有sub_images這個信息
                sub_images=data.get('sub_images')
                images=[item.get('url') for item in sub_images]  #提取sub_images中圖片的url鏈接
                return{
                    'title':title,  #詳情頁標題
                    'url':url,      #詳情頁鏈接
                    'images':images #圖片鏈接
                }
    except:
        return None #跳過異常繼續(xù)執(zhí)行

#8蔓姚、定義一個主函數(shù),調(diào)用之前的方法
def main(offset):
    html=get_page_index(offset,keyword)
    for url in parse_page_index(html):  #返回的是一個迭代器慨丐,每次輸出一個網(wǎng)址
        html = get_page_detail(url)
        if html:
            result=parse_page_detail(html,url) #傳入詳情頁鏈接坡脐、詳情頁內(nèi)容,進行解析
            print(result)
 
# 9房揭、只運行本文件中的主函數(shù)
if __name__=='__main__':
    main(offset)

預(yù)期結(jié)果:詳情頁標題备闲、詳情頁鏈接、圖片鏈接


image.png

6捅暴、下載圖片 to 本地文件夾
7恬砂、返回數(shù)據(jù) to mongodb

# 1.導(dǎo)入必要的庫:
import requests  #請求網(wǎng)頁用
from requests.exceptions import RequestException  #做requests的異常處理
from urllib.parse import urlencode  #url編碼用
from bs4 import BeautifulSoup  #網(wǎng)頁解析用
import urllib  #請求網(wǎng)頁用
import json  #格式轉(zhuǎn)換用
import re  #正則表達式用
import pymongo  #連接數(shù)據(jù)庫用
from hashlib import md5  #圖片命名用
import os
from multiprocessing import Pool  #建立多進程用

keyword='街拍圖片'
offset=100

MONGO_URL='localhost'
MONGO_DB='toutiao'
MONGO_TABLE='toutiao'

client = pymongo.MongoClient(MONGO_URL)  # 連接MongoDB
db = client[MONGO_DB]  # 如果已經(jīng)存在連接,否則創(chuàng)建數(shù)據(jù)庫

#放在全局中蓬痒,不要放在方法中泻骤,不然每次請求要重復(fù)寫headers參數(shù)。
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)","Referer":"https://www.toutiao.com/"}

# 2.獲取索引頁并分析:
def get_page_index(offset, keyword):
    data = {
        'offset': offset,
        'format': 'json',
        'keyword':  keyword,
        'autoload': 'true',
        'count': 20,
        'cur_tab': 1,   # cur_tab為3指的是圖集板塊乳幸,數(shù)過來第三個,若為1則指代綜合板塊
        'from': 'search_tab'
    }
    url = 'https://www.toutiao.com/api/search/content/?' + urlencode(data)  #url寫錯瞪讼,卡了3天啊
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        print('請求索引頁錯誤')
        return None

# 3、解析索引頁內(nèi)容
# 分析ajax請求的返回結(jié)果粹断,拿到詳情頁的url
def parse_page_index(html):
    data = json.loads(html) # 加載返回的json數(shù)據(jù)
    if data and 'data' in data.keys():  #確保返回的信息中含有data這個信息
        for item in data.get('data'):
            yield item.get('article_url') #構(gòu)造一個生成器

# 4符欠、請求詳情頁的內(nèi)容
def get_page_detail(url):
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        print('詳情頁頁錯誤', url)
        return None

# 5、解析詳情頁的內(nèi)容
def parse_page_detail(html,url):
    try:
        soup = BeautifulSoup(html, 'lxml')  #解析詳情頁的內(nèi)容
        title = soup.select('title')[0].get_text()  #獲取文章title
        images_pattern = re.compile('gallery: JSON.parse\("(.*?)"\)',re.S) #確定匹配模式
        result = re.search(images_pattern,html) #匹配內(nèi)容
        str=re.sub(r'(\\)','',result.group(1)) #去掉url鏈接中防作弊的多余的雙斜線“\\”
        if str:                         #如果匹配到內(nèi)容瓶埋,執(zhí)行接下來的操作
            data = json.loads(str)
            if data and 'sub_images' in data.keys():  #確保返回的信息中含有sub_images這個信息
                sub_images=data.get('sub_images')
                images=[item.get('url') for item in sub_images]  #提取sub_images中圖片的url鏈接
                for image in images:
                    download_img(image)   #調(diào)用一個方法希柿,下載圖片
                return{
                    'title':title,  #詳情頁標題
                    'url':url,      #詳情頁鏈接
                    'images':images #圖片鏈接
                }
    except:
        return None #跳過異常繼續(xù)執(zhí)行

# 6、存儲到mongodb
def save_to_mongo(result):
    if result:
        if db[MONGO_TABLE].insert(result):  # 插入數(shù)據(jù)
            print('存儲成功', result)
            return True
    return False

# 7养筒、下載圖片(進度+存圖)
def download_img(url):
    print('正在下載', url)
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            save_img(response.content)  #content返回二進制內(nèi)容曾撤,圖片一般返回content
        else:
            return None
    except RequestException:
        print('下載圖片錯誤', url)
        return None

#存儲圖片方法
def save_img(content):
    #生成目標文件路徑,圖片用md5命名晕粪,保證不重復(fù)
    file_path = '{0}/{1}.{2}'.format(r'C:\Users\luna\jiepai3', md5(content).hexdigest(), 'jpg')
    if not os.path.exists(file_path):
        with open(file_path, 'wb')as f:
            f.write(content)
            f.close()

#8挤悉、定義一個主函數(shù),調(diào)用之前的方法
def main(offset):
    html=get_page_index(offset,keyword)
    for url in parse_page_index(html):  #返回的是一個迭代器巫湘,每次輸出一個網(wǎng)址
        html = get_page_detail(url)
        if html:
            result=parse_page_detail(html,url) #傳入詳情頁鏈接装悲、詳情頁內(nèi)容,進行解析尚氛,下載圖片
            save_to_mongo(result) #把返回內(nèi)容存入數(shù)據(jù)庫

# 9诀诊、只運行本文件中的主函數(shù)
if __name__=='__main__':
    main(offset)

預(yù)期結(jié)果:
(1)運行結(jié)果


image.png

(2)本地文件夾載入圖片


image.png

(3)mongodb中載入數(shù)據(jù)


image.png

8、調(diào)用主函數(shù)
9阅嘶、啟動多進程

# 1.導(dǎo)入必要的庫:
import requests  #請求網(wǎng)頁用
from requests.exceptions import RequestException  #做requests的異常處理
from urllib.parse import urlencode  #url編碼用
from bs4 import BeautifulSoup  #網(wǎng)頁解析用
import urllib  #請求網(wǎng)頁用
import json  #格式轉(zhuǎn)換用
import re  #正則表達式用
import pymongo  #連接數(shù)據(jù)庫用
import os #路徑相關(guān)的函數(shù)
from hashlib import md5  #圖片命名用
from multiprocessing import Pool  #建立多進程用

GROUP_START=1
GROUP_END=20
keyword='街拍圖片'

MONGO_URL='localhost'
MONGO_DB='toutiao'
MONGO_TABLE='toutiao'

client = pymongo.MongoClient(MONGO_URL)  # 連接MongoDB
db = client[MONGO_DB]  # 如果已經(jīng)存在連接属瓣,否則創(chuàng)建數(shù)據(jù)庫

#放在全局中载迄,不要放在方法中,不然每次請求要重復(fù)寫headers參數(shù)抡蛙。
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)","Referer":"https://www.toutiao.com/"}

# 2.獲取索引頁并分析:
def get_page_index(offset, keyword):
    data = {
        'offset': offset,
        'format': 'json',
        'keyword':  keyword,
        'autoload': 'true',
        'count': 20,
        'cur_tab': 1,   # cur_tab為3指的是圖集板塊护昧,數(shù)過來第三個,若為1則指代綜合板塊
        'from': 'search_tab'
    }
    url = 'https://www.toutiao.com/api/search/content/?' + urlencode(data)  #url寫錯,卡了3天啊
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        print('請求索引頁錯誤')
        return None

# 3溜畅、解析索引頁內(nèi)容
# 分析ajax請求的返回結(jié)果捏卓,拿到詳情頁的url
def parse_page_index(html):
    data = json.loads(html) # 加載返回的json數(shù)據(jù)
    if data and 'data' in data.keys():  #確保返回的信息中含有data這個信息
        for item in data.get('data'):
            yield item.get('article_url') #構(gòu)造一個生成器

# 4、請求詳情頁的內(nèi)容
def get_page_detail(url):
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        print('詳情頁頁錯誤', url)
        return None

# 5慈格、解析詳情頁的內(nèi)容
def parse_page_detail(html,url):
    try:
        soup = BeautifulSoup(html, 'lxml')  #解析詳情頁的內(nèi)容
        title = soup.select('title')[0].get_text()  #獲取文章title
        images_pattern = re.compile('gallery: JSON.parse\("(.*?)"\)',re.S) #確定匹配模式
        result = re.search(images_pattern,html) #匹配內(nèi)容
        str=re.sub(r'(\\)','',result.group(1)) #去掉url鏈接中防作弊的多余的雙斜線“\\”
        if str:                         #如果匹配到內(nèi)容怠晴,執(zhí)行接下來的操作
            data = json.loads(str)
            if data and 'sub_images' in data.keys():  #確保返回的信息中含有sub_images這個信息
                sub_images=data.get('sub_images')
                images=[item.get('url') for item in sub_images]  #提取sub_images中圖片的url鏈接
                for image in images:
                    download_img(image)   #調(diào)用一個方法,下載圖片
                return{
                    'title':title,  #詳情頁標題
                    'url':url,      #詳情頁鏈接
                    'images':images #圖片鏈接
                }
    except:
        return None #跳過異常繼續(xù)執(zhí)行

# 6浴捆、存儲到mongodb
def save_to_mongo(result):
    if result:
        if db[MONGO_TABLE].insert(result):  # 插入數(shù)據(jù)
            print('存儲成功', result)
            return True
    return False

# 7蒜田、下載圖片(進度+存圖)
def download_img(url):
    print('正在下載', url)
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            save_img(response.content)  #content返回二進制內(nèi)容,圖片一般返回content
        else:
            return None
    except RequestException:
        print('下載圖片錯誤', url)
        return None

#存儲圖片方法
def save_img(content):
    #生成目標文件路徑选泻,圖片用md5命名冲粤,保證不重復(fù)
    file_path = '{0}/{1}.{2}'.format(r'C:\Users\luna\jiepai3', md5(content).hexdigest(), 'jpg')
    if not os.path.exists(file_path):
        with open(file_path, 'wb')as f:
            f.write(content)
            f.close()

#8、定義一個主函數(shù)页眯,調(diào)用之前的方法
def main(offset):
    html=get_page_index(offset,keyword)
    for url in parse_page_index(html):  #返回的是一個迭代器梯捕,每次輸出一個網(wǎng)址
        html = get_page_detail(url)
        if html:
            result=parse_page_detail(html,url) #傳入詳情頁鏈接、詳情頁內(nèi)容窝撵,進行解析傀顾,下載圖片
            save_to_mongo(result) #把返回內(nèi)容存入數(shù)據(jù)庫
 
# 9、只運行本文件中的主函數(shù)
if __name__=='__main__':
    groups = [i * 20 for i in list(range(GROUP_START,GROUP_END))]  # python3 range()不能直接生成列表碌奉,需要list一下
    pool = Pool() #創(chuàng)建進程池
    pool.map(main,groups)  # 第一個參數(shù)是函數(shù)短曾,第二個參數(shù)是一個迭代器,將迭代器中的數(shù)字作為參數(shù)依次傳入函數(shù)中

預(yù)期結(jié)果:
(1)圖片大量存入文件夾
(2)mongodb中數(shù)據(jù)條數(shù)變多

第三部分:后記

一赐劣、耗時:2天
二嫉拐、感受(6點)

1、0編程基礎(chǔ)學(xué)習(xí)魁兼,各個節(jié)點都會卡你一下婉徘,主要是不熟悉各種報錯。

2咐汞、中間有一些支線任務(wù):比如說安裝工具盖呼,會耽擱一些時間。

3碉考、明確知道自己有拖延癥的人,沒必要開頭就一股腦安裝一堆工具挺身,到了要用的時候再安裝吧侯谁,不然很難起頭開始做。mongodb、stduio-3t都是到了步驟5我才安裝的

4墙贱、實在找不到問題热芹,找會的人問一下。別人點撥一下惨撇,會更容易找到錯誤點伊脓。我應(yīng)該是qq群里問過一個問題,其它都是百度+自己調(diào)試解決魁衙。

5、新人小白的方法:
(1)化整為零,代碼一段一段跑通总滩,這樣容易推進一些介汹。
(2)明確自己的預(yù)期結(jié)果。代碼運行后纵隔,如果返回結(jié)果跟預(yù)期結(jié)果一致翻诉,那就通過;如果不一致捌刮,那就繼續(xù)找問題碰煌。

6、這一天太能坐了绅作,竟然坐了9個小時芦圾。搞完后,胸悶氣短了棚蓄,趕緊走走堕扶,坑爹啊,以后不能這樣了梭依!

三稍算、總結(jié)問題,踩的坑(10個)
1役拴、chrome中F12后糊探,preview不顯示源代碼,顯示的是網(wǎng)頁或者圖片河闰。

這個是谷歌瀏覽器的bug科平,換個瀏覽器就好了。

2姜性、找不到offset

篩選XHR文件瞪慧,在headers欄目,Query String Parameters模塊部念,就可以看到offset的變化弃酌。

3氨菇、xhr是什么文件類型?

xhr:XMLHttpRequest在后臺與服務(wù)器交換數(shù)據(jù)妓湘,這意味著可以在不加載整個網(wǎng)頁的情況下查蓉,對網(wǎng)頁某部分的內(nèi)容進行更新。它是Ajax的一種用法榜贴,而Ajax并不是一門語言豌研,只是一種不需要加載整個網(wǎng)頁,只是更新局部內(nèi)容的技術(shù)唬党。

4鹃共、json書寫格式什么樣?

對象:{"name":"Michael","age":24}
數(shù)組:比如:[{"name":"Michael","age":24},{"name":"Tom","age":25}]
值:{"name":"Michael", "birthday":{"month":8,"day":26}}初嘹,類似于對象嵌套對象.

5及汉、query string parameters 這是什么啊屯烦?

Query String Parameters指的就是通過在URL中攜帶的方式提交的參數(shù)坷随,也就是get請求中需要的參數(shù)

6、如何簡單的理解Python中的if name == 'main' 這個用法

當(dāng)前理解:只運行本文件中主函數(shù)

7驻龟、多進程作用

在爬蟲中主要目的是提高爬取的效率温眉,實現(xiàn)秒爬

8、多進程創(chuàng)建和使用

在Windows上要想使用進程模塊翁狐,就必須把有關(guān)進程的代碼寫在當(dāng)前.py文件的

if __name__=='__main__':
    pool = Pool() #創(chuàng)建進程池

語句的下面类溢,才能正常使用Windows下的進程模塊。Unix/Linux下則不需要露懒。

9闯冷、多進程在notebook中卡死的問題。

解決辦法:換在編輯器中運行懈词,例如蛇耀,我就是在sublime text運行python

10、mongodb的安裝和啟動

(1)下載一個mongodb安裝包進行安裝
(2)配置系統(tǒng)變量


image.png

(3)用cmd啟動:

  • 第一步坎弯,用cd轉(zhuǎn)入mongodb的路徑下:cd E:\裝機軟件包\mongodb\bin
  • 第二步纺涤,啟動:mongod --dbpath "E:\裝機軟件包\mongodb\data\db"


    image.png

    路徑是指mongodb的安裝路徑,通過以上3步就可以啟動了抠忘。

As you can see撩炊!第一個項目總是斷斷續(xù)續(xù),坎坎坷坷的崎脉,不過終究還是可以解決的拧咳,繼續(xù)加油吧!——2019.04.02

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囚灼,一起剝皮案震驚了整個濱河市骆膝,隨后出現(xiàn)的幾起案子砾淌,更是在濱河造成了極大的恐慌,老刑警劉巖谭网,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赃春,居然都是意外死亡愉择,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門织中,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锥涕,“玉大人,你說我怎么就攤上這事狭吼〔阕梗” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵刁笙,是天一觀的道長破花。 經(jīng)常有香客問我,道長疲吸,這世上最難降的妖魔是什么座每? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮摘悴,結(jié)果婚禮上峭梳,老公的妹妹穿的比我還像新娘。我一直安慰自己蹂喻,他們只是感情好葱椭,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著口四,像睡著了一般孵运。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窃祝,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天掐松,我揣著相機與錄音,去河邊找鬼粪小。 笑死大磺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的探膊。 我是一名探鬼主播杠愧,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逞壁!你這毒婦竟也來了流济?” 一聲冷哼從身側(cè)響起锐锣,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绳瘟,沒想到半個月后雕憔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡糖声,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年斤彼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘸泻。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡琉苇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悦施,到底是詐尸還是另有隱情并扇,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布抡诞,位于F島的核電站穷蛹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昼汗。R本人自食惡果不足惜俩莽,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乔遮。 院中可真熱鬧扮超,春花似錦、人聲如沸蹋肮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坯辩。三九已至馁龟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漆魔,已是汗流浹背坷檩。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留改抡,地道東北人矢炼。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像阿纤,于是被迫代替她去往敵國和親句灌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本文是學(xué)習(xí) 天善學(xué)院 Python3爬蟲三大案例實戰(zhàn)分享 / 分析Ajax抓取今日頭條街拍美圖 后所寫,感謝崔慶才...
    4ffde5305e8f閱讀 1,814評論 0 5
  • 一胰锌、介紹 還是根據(jù)崔大大的視頻來碼的文章骗绕,不得不說,抓取文件并下載下來比抓取網(wǎng)頁內(nèi)容信息復(fù)雜多了 二资昧、流程 目標站...
    1想得美閱讀 3,054評論 0 4
  • 昨天學(xué)習(xí)了分析ajax來爬取動態(tài)加載的技術(shù)酬土,今天來分享下成果。ajax只是一種技術(shù)格带,不是一門語言诺凡,他是用利用XML...
    DKider閱讀 837評論 0 6
  • 一本書要花費多少心思,經(jīng)歷多少磨難践惑,忍受多少辛酸,只是為了讓偶然讀到它的人消磨時間嘶卧,在旅途中解悶兒尔觉。 作者應(yīng)該從寫...
    蘇舒A閱讀 133評論 0 0
  • 首先非常感謝這次活動的舉辦人:良俊、師盛芥吟、顏瑾侦铜,也是他們創(chuàng)建了愛巴給了大家一個互相認識互相交流的機會。 ...
    每天行動一點閱讀 216評論 0 0