day02- requests語法bs4解析語法和存mysql

1. requests語法

"""__author__= 雍新有"""
"""
解析網(wǎng)站乍炉,獲取源碼
"""
import requests

# 1.語法
# requests.request(method, url, proxy, headers)
# requests.get(url) 相當(dāng)于 requests.request('get', url)

# 傳入url參數(shù)狮辽,獲取源碼
url = 'http://httpbin.org/get'
response = requests.get(url)
# response = requests.request('get', url)
# print(response.text)

# 獲取boss直聘的源碼
# 傳入url參數(shù)夹孔,header參數(shù)
# 在header中組裝User-Agent伪嫁,默認(rèn)User-Agent為python-requests/版本
url = 'https://www.zhipin.com/c101270100/?query=python&page=%s&ka=page-%s'
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.get(url, headers=headers)
# print(response.text)

# 傳入url參數(shù)坡锡,header參數(shù)循未,proxies參數(shù)
# url = 'https://www.zhipin.com/c101270100/?query=python&page=%s&ka=page-%s'
# url = 'http://httpbin.org/get'
# proxies = {
#     'http': 'http://121.233.206.189:9999'
# }
# 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.get(url, headers=headers, proxies=proxies)
# print(response.text)

url = 'http://www.baidu.com'
response = requests.get(url)
# content獲取到的是bytes類型的值
print(response.content)
# text獲取到的是str類型的值
print(response.text)
# status_code獲取到的是響應(yīng)狀態(tài)碼
print(response.status_code)
# 獲取cookies
print(response.cookies)

# 傳入url參數(shù)驹饺,請(qǐng)求參數(shù)data
url = 'http://www.baidu.com/s'
params = {
    'wd': 'python'
}
response = requests.get(url, params)
print(response.text)

# 其他請(qǐng)求方式,與get的區(qū)別就是params和data
requests.post(url, data=None, json=None, headers=None, proxies=None)
requests.put(url, data=None, json=None, headers=None, proxies=None)
requests.patch(url, data=None, json=None, headers=None, proxies=None)
requests.delete(url, data=None, json=None, headers=None, proxies=None)

1.1 requests貓眼排行并存數(shù)據(jù)庫

"""__author__= 雍新有"""
from db_helper import get_conn, execute_sql, close_conn

"""
    爬取貓眼排行榜前100的電影信息
"""
import requests
import re


def parse_html(html):
    new_data = []
    patterns = re.compile('<dd>.*?<i class="board-index board-index-.*?">(.*?)</i>.*?<a .*? title="(.*?)" .*?>.*?<img .*?>.*?<img data-src="(.*?)" .*?>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>.*?<p class="score"><i class="integer">(.*?)</i><i class="fraction">(.*?)</i></p>.*?</dd>', re.S)
    result = patterns.findall(html)
    # Python strip()方法用于移除字符串頭尾指定的字符(默認(rèn)為空格或換行符)或字符序列祠乃。
    # 注意:該方法只能刪除開頭或是結(jié)尾的字符,不能刪除中間部分的字符仑乌。
    for item in result:
        data = {
            'index': item[0].strip(),
            'img': item[1].strip(),
            'title': item[2].strip(),
            'actors': item[3].strip(),
            'time': item[4].strip(),
            'score': item[5] + item[6],
        }
        new_data.append(data)
    return new_data


def get_html(url):
    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.get(url, headers=headers)
    return response.text


def save_result(result):
    # 存儲(chǔ)
    conn = get_conn()
    for item in result:
        sql = f'insert into movies ' \
              f'(paiming, name, src, actor, time, score) ' \
              f'values ("{item["index"]}", "{item["img"]}", "{item["title"]}", ' \
              f'"{item["actors"]}", "{item["time"]}", {item["score"]});'
        print(sql)
        execute_sql(sql, conn)
    close_conn(conn)


def main():
    url = 'https://maoyan.com/board/4?offset={}'
    for i in range(10):
        real_url = url.format(i*10)
        # 解析url地址源碼
        html = get_html(real_url)
        # print(html)
        result = parse_html(html)
        # 存儲(chǔ)數(shù)據(jù)(mysql百拓、mongodb、redis....)
        save_result(result)
        # print(result)


if __name__ == '__main__':
    main()

2. bs4語法

"""__author__= 雍新有"""
from bs4 import BeautifulSoup


html = """
<html><head><title>學(xué)習(xí)爬蟲好開心</title></head>
<body>
<p class="title" name="dromouse"><b>( ̄TT ̄)筆芯</b></p>
<p class="story">喵了個(gè)貓
<a  class="sister" id="link1">汪汪汪晰甚,汪星人</a> and
<a  class="sister" id="link2">喵喵喵衙传,喵星人</a>
最后變成一鍋湯</p>
<p class="story">...</p>
"""


soup = BeautifulSoup(html, 'lxml')

# 標(biāo)簽解析器、標(biāo)準(zhǔn)選擇器厕九、CSS選擇器
# 1. 標(biāo)簽選擇器
# soup對(duì)象蓖捶、標(biāo)簽   獲取到的是標(biāo)簽信息(包括標(biāo)簽與標(biāo)簽內(nèi)的內(nèi)容)
print(soup.title)
print(soup.title.string)
print(soup.p)
print(soup.p.string)
# soup對(duì)象.標(biāo)簽   返回的是第一個(gè)標(biāo)簽的內(nèi)容
print(soup.a)
print(soup.a.string)
# soup對(duì)象,標(biāo)簽[屬性值]扁远、soup對(duì)象.標(biāo)簽[屬性值]
print(soup.a['href'])
print(soup.a.attrs['href'])

# 獲取兄弟節(jié)點(diǎn)
# 獲取當(dāng)前節(jié)點(diǎn)以下的第一個(gè)兄弟節(jié)點(diǎn) next_sibling
# 獲取當(dāng)前節(jié)點(diǎn)以下的所有的兄弟節(jié)點(diǎn) next_siblings
siblings = soup.p.next_siblings
for item in siblings:
    print(item)

# 獲取當(dāng)前節(jié)點(diǎn)以下的第一個(gè)兄弟節(jié)點(diǎn)  previous_sibling
siblings = soup.a.previous_sibling
print(siblings)
# 獲取當(dāng)前節(jié)點(diǎn)以下的所有的兄弟節(jié)點(diǎn)  previous_siblings
siblings = soup.a.previous_siblings
for item in siblings:
    print(item)

# 獲取父節(jié)點(diǎn)俊鱼,祖父節(jié)點(diǎn)
# print('=========')
# print(soup.a.parents)
# for item in soup.a.parents:
#     print(item)


# 2.
html='''
<div class="panel">
    <div class="panel-heading">
        <h4>Hello</h4>
    </div>
    <div class="panel-body">
        <ul class="list" id="list-1">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
            <li class="element">Jay</li>
        </ul>
        <ul class="list list-small" id="list-2">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
        </ul>
    </div>
</div>
'''
print('/**************************')
soup = BeautifulSoup(html, 'lxml')
# 語法: soup.find(name, attr, text)
# name標(biāo)簽: 通過標(biāo)簽查詢內(nèi)容
print(soup.find('ul'))
print(soup.find_all('ul'))

# attrs屬性,通過屬性查詢內(nèi)容
print(soup.find_all(attrs={'id': 'list-2'}))
print(soup.find_all(attrs={'class': 'list'}))

print(soup.find_all(id='list-2'))
print(soup.find_all(class_='list'))

# text屬性畅买,通過內(nèi)容查詢標(biāo)簽
print('===========')
print(soup.find_all(text='Foo'))

# 3. CSS選擇器
print('======')
print(soup.select('ul'))

3. mysql連接

"""__author__= 雍新有"""
import pymysql


def get_conn():
    # 鏈接數(shù)據(jù)庫
    conn = pymysql.Connection(host='47.100.164.252', user='root',
                              password='123456', database='1902spider',
                              port=3306, charset='utf8')
    return conn


def execute_sql(sql, conn):
    # 獲取游標(biāo)
    cursor = conn.cursor()
    cursor.execute(sql)
    # 提交到數(shù)據(jù)庫并闲,不然不會(huì)出數(shù)據(jù)
    conn.commit()


def close_conn(conn):
    # 關(guān)閉鏈接
    conn.close()

4. 今日頭條爬取

"""__author__= 雍新有"""
import requests
import re


def get_html(url):
    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'

    }
    # 解析源碼可采用正則、bs4
    response = requests.get(url, headers=headers)
    return response.text


def parse_html(html):
    patterns = re.compile('url_list.*?(http.*?p[0-9]\.pstatp\.com.*?origin.*?pgc-image.*?)}', re.S)
    result = patterns.findall(html)
    result = set(result)
    return result


def main():
    url = 'https://www.toutiao.com/a6714556525513277964/'
    html = get_html(url)
    # print(html)
    result = parse_html(html)
    for item in result:
        item1 = item.replace('\\\\\\u002F', '/')
        item2 = item1.replace('\\"', '')
        print(item2)


if __name__ == '__main__':
    main()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谷羞,一起剝皮案震驚了整個(gè)濱河市帝火,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洒宝,老刑警劉巖购公,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雁歌,居然都是意外死亡宏浩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門靠瞎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來比庄,“玉大人,你說我怎么就攤上這事乏盐〖岩ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵父能,是天一觀的道長神凑。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么溉委? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任鹃唯,我火速辦了婚禮,結(jié)果婚禮上瓣喊,老公的妹妹穿的比我還像新娘坡慌。我一直安慰自己,他們只是感情好藻三,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布洪橘。 她就那樣靜靜地躺著,像睡著了一般棵帽。 火紅的嫁衣襯著肌膚如雪熄求。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天逗概,我揣著相機(jī)與錄音抡四,去河邊找鬼。 笑死仗谆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淑履。 我是一名探鬼主播隶垮,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼秘噪!你這毒婦竟也來了狸吞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤指煎,失蹤者是張志新(化名)和其女友劉穎蹋偏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體至壤,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡威始,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了像街。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黎棠。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖镰绎,靈堂內(nèi)的尸體忽然破棺而出脓斩,到底是詐尸還是另有隱情,我是刑警寧澤畴栖,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布随静,位于F島的核電站,受9級(jí)特大地震影響吗讶,放射性物質(zhì)發(fā)生泄漏燎猛。R本人自食惡果不足惜恋捆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扛门。 院中可真熱鬧鸠信,春花似錦、人聲如沸论寨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葬凳。三九已至绰垂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間火焰,已是汗流浹背劲装。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昌简,地道東北人占业。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像纯赎,于是被迫代替她去往敵國和親谦疾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • 1.A simple master-to-slave replication is currently being...
    Kevin關(guān)大大閱讀 5,950評(píng)論 0 3
  • 什么是數(shù)據(jù)庫犬金? 數(shù)據(jù)庫是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序念恍。每個(gè)數(shù)據(jù)庫具有一個(gè)或多個(gè)不同的API,用于創(chuàng)建晚顷,訪問峰伙,管理...
    chen_000閱讀 4,032評(píng)論 0 19
  • 今天看到一位朋友寫的mysql筆記總結(jié),覺得寫的很詳細(xì)很用心该默,這里轉(zhuǎn)載一下瞳氓,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,725評(píng)論 0 30
  • https://blog.csdn.net/steven_liwen/article/details/531884...
    SkTj閱讀 2,361評(píng)論 0 16
  • 2017年1月20日权均,晴天顿膨,小霧。 昨天晚上大寶叫我和小寶下去吃燒烤叽赊,明天早上八點(diǎn)爬起來搬家恋沃。晚上又要把一部分東西...
    良小哲閱讀 106評(píng)論 0 0