爬蟲(chóng)整理(三)Requests

Requests 是一個(gè) Python 的外部模塊, 需要手動(dòng)安裝. 使用 pip 安裝就好了.

import requests
import webbrowser  #  使用瀏覽器打開(kāi)
param = {"wd": "itswl.github"}  # 搜索的信息
r = requests.get('https://www.baidu.com/s', params=param)
print(r.url)    # 用get 方式
webbrowser.open(r.url)
# https://www.baidu.com/s?wd=itswl.github
import requests
import webbrowser  #  使用瀏覽器打開(kāi)
param = {"wd": "itswl.github"}  # 搜索的信息
r = requests.get('http://www.baidu.com/s', params=param)
print(r.url)    # 用get 方式
webbrowser.open(r.url)
def get():
    print('\nget')
    param = {"wd": "itswl.github"}
    r = requests.get('https://www.baidu.com/s', params=param)
    print(r.url)
    print(r.text)

# get()
def post_name():
    print('\npost name')
    # http://pythonscraping.com/pages/files/form.html
    data = {'firstname': 'laii', 'lastname': 'weii'}
    r = requests.post('http://pythonscraping.com/files/processing.php', data=data)
    print(r.text)
post_name()

def post_image():
    print('\npost image')
    # http://pythonscraping.com/files/form2.html
    file = {'uploadFile': open('./image.png', 'rb')}
    r = requests.post('http://pythonscraping.com/files/processing2.php', files=file)
    print(r.text)


def post_login():
    print('\npost login')
    # http://pythonscraping.com/pages/cookies/login.html
    payload = {'username': 'Morvan', 'password': 'password'}
    r = requests.post('http://pythonscraping.com/pages/cookies/welcome.php', data=payload)
    print(r.cookies.get_dict())
    # http://pythonscraping.com/pages/cookies/profile.php
    r = requests.get('http://pythonscraping.com/pages/cookies/profile.php', cookies=r.cookies)
    print(r.text)


def session_login():   # 使用cookie
    print('\nsession login')
    # http://pythonscraping.com/pages/cookies/login.html
    session = requests.Session()
    payload = {'username': 'Morvan', 'password': 'password'}
    r = session.post('http://pythonscraping.com/pages/cookies/welcome.php', data=payload)
    print(r.cookies.get_dict())
    r = session.get("http://pythonscraping.com/pages/cookies/profile.php")
    print(r.text)



post_name()
post_image()
post_login()
session_login()

下載文件

import os
os.makedirs('./img/', exist_ok=True)

IMAGE_URL = "https://morvanzhou.github.io/static/img/description/learning_step_flowchart.png"


def urllib_download():
    from urllib.request import urlretrieve
    urlretrieve(IMAGE_URL, './img/image1.png')      # whole document


def request_download():
    import requests
    r = requests.get(IMAGE_URL)
    with open('./img/image2.png', 'wb') as f:
        f.write(r.content)                      # whole document


def chunk_download():
    import requests
    r = requests.get(IMAGE_URL, stream=True)    # stream loading

    with open('./img/image3.png', 'wb') as f:
        for chunk in r.iter_content(chunk_size=32):
            f.write(chunk)


urllib_download()
print('download image1')
request_download()
print('download image2')
chunk_download()
print('download image3')

一個(gè)小練習(xí)鞋邑,抓取美女吧圖片

# coding=utf-8
import requests
from lxml import etree
import os
import re


class TieBa(object):
    """抓取百度貼吧美女圖片"""
    def __init__(self, word):
        self.url = 'https://tieba.baidu.com/f?kw={}'.format(word) # word 美女
        self.headers = {
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; TUCOWS) '
        }

    def get_data(self, url):
        # 構(gòu)造請(qǐng)求
        response = requests.get(url, headers=self.headers)
        data = response.content
        # print(data)
        return data

    def parse_page(self, data):
        """解析數(shù)據(jù)"""
        # 創(chuàng)建xpath對(duì)象
        html = etree.HTML(data)
        # 提取當(dāng)前頁(yè)標(biāo)題,url數(shù)據(jù)
        node_list = html.xpath('//*[@id="thread_list"]/li/div/div[2]/div[1]/div[1]/a')
        detail_list = []
        for node in node_list:
            temp = dict()
            temp['title'] = node.xpath('./text()')[0]
            temp['url'] = 'https://tieba.baidu.com' + node.xpath('./@href')[0]
            detail_list.append(temp)
            # print(temp)
        # 提取下一頁(yè)連接
        next_url = html.xpath('//*[@id="frs_list_pager"]/a[contains(text(), "下一頁(yè)")]/@href')[0]
        next_url = 'http:' + next_url if len(next_url) > 0 else None
        # print(next_url)
        return detail_list, next_url

    def parse_detail(self, detail_list):
        """提取詳情頁(yè)url"""
        data_url = []
        for detail in detail_list:
            data_url.append(detail['url'])
        return data_url

    def save_data(self, url):
        """保存數(shù)據(jù)"""
        # 請(qǐng)求標(biāo)題連接地址
        data = self.get_data(url)
        # 創(chuàng)建xpath對(duì)象
        html = etree.HTML(data)
        # print(html)
        # print(url)
        # 獲取圖片url
        try:
            image_url = html.xpath('//*[contains(@id,"post_content")]/img[1]/@src')[0]
        except Exception as e:
            return
        print(image_url)
        # 判斷圖片地址是否已jpg結(jié)尾
        if re.match(r'.*\.jpg$', image_url):
            # 請(qǐng)求圖片地址缀皱,獲取圖片
            image_data = self.get_data(image_url)
            filename = 'image/' + image_url.split('/')[-1]
            # print(filename)
            # 保存圖片
            with open(filename, 'wb') as f:
                f.write(image_data)

    def run(self):
        # 判斷是否有image文件夾
        if not os.path.exists('image'):
            # 創(chuàng)建文件夾
            os.mkdir('image')
        next_url = self.url
        # 請(qǐng)求美女吧首頁(yè)
        data = self.get_data(next_url)
        # 保存首頁(yè)文件,觀察數(shù)據(jù)蔓搞,是否有需要的數(shù)據(jù)
        with open('tieba.json', 'wb') as f:
            f.write(data)
        # 如果有下一頁(yè)就執(zhí)行
        while next_url:
            # 獲取每頁(yè)標(biāo)題和對(duì)應(yīng)的連接地址
            detail_list, next_url = self.parse_page(data)
            # 提取每頁(yè)的詳情頁(yè)的url
            data_url = self.parse_detail(detail_list)
            # 遍歷每個(gè)url
            for url in data_url:
                # 保存圖片
                self.save_data(url)
            # 構(gòu)造下一頁(yè)請(qǐng)求
            data = self.get_data(next_url)


if __name__ == '__main__':
    tb = TieBa('美女')
    tb.run()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末上岗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子肢础,更是在濱河造成了極大的恐慌还栓,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件传轰,死亡現(xiàn)場(chǎng)離奇詭異剩盒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)路召,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)勃刨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)波材,“玉大人,你說(shuō)我怎么就攤上這事身隐⊥⑶” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵贾铝,是天一觀的道長(zhǎng)隙轻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)垢揩,這世上最難降的妖魔是什么玖绿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮叁巨,結(jié)果婚禮上斑匪,老公的妹妹穿的比我還像新娘。我一直安慰自己锋勺,他們只是感情好蚀瘸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著庶橱,像睡著了一般贮勃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苏章,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天寂嘉,我揣著相機(jī)與錄音,去河邊找鬼枫绅。 笑死泉孩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撑瞧。 我是一名探鬼主播棵譬,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼预伺!你這毒婦竟也來(lái)了订咸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酬诀,失蹤者是張志新(化名)和其女友劉穎脏嚷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瞒御,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡父叙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趾唱。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荠藤,死狀恐怖憎兽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤游两,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布唱星,位于F島的核電站荣瑟,受9級(jí)特大地震影響贾虽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜析既,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一躬贡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眼坏,春花似錦拂玻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至囤屹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逢渔,已是汗流浹背肋坚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肃廓,地道東北人智厌。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像盲赊,于是被迫代替她去往敵國(guó)和親铣鹏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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