day03-selenium簡單語法xpath解析mongobd

1. selenium語法

"""__author__= 雍新有"""
from selenium import webdriver

# 模擬調用不同的瀏覽器
# webdriver.Chrome()
# webdriver.Firefox()
# webdriver.PhantomJS()
# webdriver.Safari()
# webdriver.Opera()

broswer = webdriver.Chrome()

broswer.get('http://www.taobao.com')

2. xpath語法

"""__author__= 雍新有"""
"""
    使用xpath解析源碼
"""
from lxml import etree


html = '''
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            <ul>
                <li class="class1"><a href="class1.html">1</a></li>
                <li class="class2"><a href="class2.html">2</a></li>
                <li class="class3"><a href="class3.htl">3</a></li>
                <li class="class4"><a href="class4.html">4</a></li>
                <li class="class5"><a href="class5.html">5</a></li>
                <li>
                    <ul>
                        <li class="class1"><a href="class6.html">6</a></li>
                        <li class="ass7"><a href="class7.html">7</a></li>
                        <li class="class8"><a href="class8.html">8</a></li>
                    </ul>
                </li>
            </ul>
        <div>
    </body>
    </html>
'''

# soup = BeautifulSoup(html, 'lxml')
tree = etree.HTML(html)

# 拿到整個html的內容卖宠,只不過是一個對象  '/'表示從根節(jié)點去獲取元素
a1 = tree.xpath('/html')
print(a1)

# '//'從任何一個位置上獲取元素
a2 = tree.xpath('//ul')
print(a2)

a3 = tree.xpath('/html/body/div/ul')
print(a3)

a4 = tree.xpath('/html/body/div/ul/li/ul')
print(a4)
for item in a4:

    # '.'表示當前位置蜡吧,此處鼎姊,表示ul的位置
    print(item.xpath('./li/a'))
    # '@'獲取屬性
    print(item.xpath('./li/a/@href'))
    # text()表示獲取標簽內的信息
    print(item.xpath('./li/a/text()'))

# //* -- 從任何一個位置去找所有類名為class1的標簽
a5 = tree.xpath('//*[@class="class1"]')
print(a5)
for item in a5:
    print(item.xpath('./a/text()'), item.xpath('./a/@href'))

3. mongodb

3.1 mongodb語法

查看數據庫: show dbs
創(chuàng)建數據庫: db.createCollection('maoyan')
使用: use maoyan

MongoDB中的概念:數據庫(類似mysql中的數據庫)枯夜、
集合(類似mysql中的表)究履、
文檔(不用定義表結構,直接記錄數據)

注意: 集合可不用自己創(chuàng)建埠褪,向集合中插入數據時,集合會自動創(chuàng)建
db.集合名.insert() ===> db.user.insert({'name': 'whf'})
db.集合名.save()
db.集合名.find() 查詢集合內的文檔信息
db.集合名.find({}) 查詢集合內的文檔信息
show collections 查詢集合

db.集合名.drop() 刪除集合 -- 刪除表
db.user(集合名).remove({'name': 'li4'}) (條件) -- 刪除集合中的文檔(刪除一條記錄)
db.user.update({'name': 'zhang3'}, {'$set':{'age': 20}}) -- 修改字段

3.2 mongodb數據庫連接

"""__author__= 雍新有"""
"""
    使用pymongo
"""
import pymongo


# 獲取客戶端
client = pymongo.MongoClient(host='47.100.164.252', port=27017)

# 獲取數據庫
db = client['spider']


def execute_movie(data):

    db['douban'].insert(data)


if __name__ == '__main__':
    data = {'title': '一出好戲', 'rate': '9.0'}
    execute_movie(data)

4. 豆瓣電影爬取

  • json接口
  • mongdb存儲
"""__author__= 雍新有"""
import json

from db_helper import execute_movie

"""
    爬取豆瓣電影型将,進行存儲(采用mongodb) - 爬接口而不是直接爬頁面數據
"""
import requests


def get_html(url):
    # request中默認user-agent為python=requests/版本
    # urllib中默認user-agent為python-urllib/版本
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'
    }
    try:
        response = requests.get(url, headers=headers)
        # loads()將json格式數據轉化成dict
        # dumps()將dict轉化成json格式數據
        data = json.loads(response.text)
        return data
    except Exception as e:
        print('IP異常,請切換IP')
        # TODO:從ip代理池獲取一個有效代理
        proxies = {
            'http': 'http://183.129.207.78:18118'
        }
        response = requests.get(url, headers=headers, proxies=proxies)
        # loads()將json格式數據轉化成dict
        # dumps()將dict轉化成json格式數據
        data = json.loads(response.text)
        return data


if __name__ == '__main__':

    # 分類地址
    tag_url = 'https://movie.douban.com/j/search_tags?type=movie&source='
    # 獲取電影信息地址
    movie_url = 'https://movie.douban.com/j/search_subjects?type=movie&tag={tag}&sort=recommend&page_limit=20&page_start={start}'
    # 獲取分類接口返回信息
    result = get_html(tag_url)
    for tag in result['tags']:
        for i in range(20):
            real_url = movie_url.format(tag=tag, start=i*20)
            # 獲取到的是電影信息
            result_movie = get_html(real_url)
            print(result_movie['subjects'])
            data = result_movie['subjects']
            if len(data):
                # 接口返回電影信息存在荐虐,則保持
                for item in data:
                    # item為每一個電影的信息七兜,使用mongdb存儲
                    # 使用pymongo進行存儲數據
                    execute_movie(data)
            else:
                # 接口返回電影信息不存在,則跳出當前循環(huán)
                break


5. 爬取u17最熱

  • 用的本地mongdb
  • post請求
"""__author__= 雍新有"""
import pymongo
import requests
import json

client = pymongo.MongoClient(host='127.0.0.1', port=27017)
db = client['spider']


def get_html(url, data):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36',
    }
    response = requests.post(url, headers=headers, data=data)
    result = json.loads(response.text)

    return result


def save_mongo(data):
    for item in data:
        db['u17'].insert_one(item)


def main():
    post_url = 'http://www.u17.com/comic/ajax.php?mod=comic_list&act=comic_list_new_fun&a=get_comic_list'
    comic_url = 'http://www.u17.com/comic/{comic_id}.html'
    for i in range(1, 6):
        data = {
            'data[group_id]': 'no',
            'data[theme_id]': 'no',
            'data[is_vip]': 'no',
            'data[accredit]': '2',
            'data[color]': 'no',
            'data[comic_type]': 'no',
            'data[series_status]': 'no',
            'data[order]': '1',
            'data[page_num]': str(i),
            'data[read_mode]': 'no',
        }
        json = get_html(post_url, data)
        real_result = []
        for item in json['comic_list']:
            data = {
                'real_url': comic_url.format(comic_id=item['comic_id']),
                'name': item['name'],
                'img': item['cover'],
                'type': item['line1'],
            }
            real_result.append(data)
        print(real_result)
        save_mongo(real_result)


if __name__ == '__main__':
    main()
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末福扬,一起剝皮案震驚了整個濱河市腕铸,隨后出現的幾起案子,更是在濱河造成了極大的恐慌铛碑,老刑警劉巖恬惯,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異亚茬,居然都是意外死亡酪耳,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門刹缝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碗暗,“玉大人,你說我怎么就攤上這事梢夯⊙粤疲” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵颂砸,是天一觀的道長噪奄。 經常有香客問我,道長人乓,這世上最難降的妖魔是什么勤篮? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮色罚,結果婚禮上碰缔,老公的妹妹穿的比我還像新娘。我一直安慰自己戳护,他們只是感情好金抡,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腌且,像睡著了一般梗肝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铺董,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天巫击,我揣著相機與錄音,去河邊找鬼。 笑死喘鸟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的驻右。 我是一名探鬼主播什黑,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼堪夭!你這毒婦竟也來了愕把?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤森爽,失蹤者是張志新(化名)和其女友劉穎恨豁,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體爬迟,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡橘蜜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了付呕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片计福。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖徽职,靈堂內的尸體忽然破棺而出象颖,到底是詐尸還是另有隱情,我是刑警寧澤姆钉,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布说订,位于F島的核電站,受9級特大地震影響潮瓶,放射性物質發(fā)生泄漏陶冷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一毯辅、第九天 我趴在偏房一處隱蔽的房頂上張望埃叭。 院中可真熱鬧,春花似錦悉罕、人聲如沸赤屋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽类早。三九已至,卻和暖如春嗜逻,著一層夾襖步出監(jiān)牢的瞬間涩僻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逆日,地道東北人嵌巷。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像室抽,于是被迫代替她去往敵國和親搪哪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容

  • NoSql數據庫優(yōu)缺點 在優(yōu)勢方面主要體現在下面幾點: 簡單的擴展 快速的讀寫 低廉的成本 靈活的數據模型 在不足...
    dreamer_lk閱讀 2,718評論 0 6
  • 一坪圾、MongoDB簡介 1.概述 ? MongoDB是一個基于分布式文件存儲的數據庫晓折,由C++語言編寫。旨在為WE...
    鄭元吉閱讀 977評論 0 2
  • 一兽泄、MongoDB簡介 概述MongoDB是一個基于分布式文件存儲的數據庫漓概,由C++語言編寫。旨在為WEB應用提供...
    王梓懿_1fbc閱讀 493評論 0 3
  • 一病梢、MongoDB簡介 概述MongoDB是一個基于分布式文件存儲的數據庫胃珍,由C++語言編寫。旨在為WEB應用提供...
    fly5閱讀 286評論 0 0
  • 一蜓陌、MongoDB簡介 概述MongoDB是一個基于分布式文件存儲的數據庫堂鲜,由C++語言編寫。旨在為WEB應用提供...
    未央_m閱讀 712評論 0 1