国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

這篇具有很好參考價(jià)值的文章主要介紹了Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

Urllib

1.什么是互聯(lián)網(wǎng)爬蟲(chóng)?

如果我們把互聯(lián)網(wǎng)比作一張大的蜘蛛網(wǎng),那一臺(tái)計(jì)算機(jī)上的數(shù)據(jù)便是蜘蛛網(wǎng)上的一個(gè)獵物,而爬蟲(chóng)程序就是一只小蜘蛛,沿著蜘蛛網(wǎng)抓取自己想要的數(shù)據(jù)

解釋1:通過(guò)一個(gè)程序,根據(jù)Url(淘寶)進(jìn)行爬取網(wǎng)頁(yè),獲取有用信息

解釋2:使用程序模擬瀏覽器,去向服務(wù)器發(fā)送請(qǐng)求,獲取響應(yīng)信息

2.爬蟲(chóng)核心?

1.爬取網(wǎng)頁(yè):爬取整個(gè)網(wǎng)頁(yè) 包含了網(wǎng)頁(yè)中所有得內(nèi)容

2.解析數(shù)據(jù):將網(wǎng)頁(yè)中你得到的數(shù)據(jù) 進(jìn)行解析

3.難點(diǎn):爬蟲(chóng)和反爬蟲(chóng)之間的博弈

3.爬蟲(chóng)的用途?

數(shù)據(jù)分析/人工數(shù)據(jù)集

社交軟件冷啟動(dòng)

輿情監(jiān)控

競(jìng)爭(zhēng)對(duì)手監(jiān)控

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

4.爬蟲(chóng)分類(lèi)?

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

5.反爬手段?

1.User‐Agent:

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

6.urllib庫(kù)使用

使用urllib來(lái)獲取百度首頁(yè)的源碼

# 使用urllib來(lái)獲取百度首頁(yè)的源碼
import urllib.request

# (1)定義一個(gè)url  就是你要訪問(wèn)的地址
url = 'http://www.baidu.com'

# (2)模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求 response響應(yīng)
response = urllib.request.urlopen(url)

# (3)獲取響應(yīng)中的頁(yè)面的源碼  content 內(nèi)容的意思
# read方法  返回的是字節(jié)形式的二進(jìn)制數(shù)據(jù)
# 我們要將二進(jìn)制的數(shù)據(jù)轉(zhuǎn)換為字符串
# 二進(jìn)制--》字符串  解碼  decode('編碼的格式')
content = response.read().decode('utf-8')

# (4)打印數(shù)據(jù)
print(content)
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
一個(gè)類(lèi)型 HTTPResponse

import urllib.request

url = 'http://www.baidu.com'

# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(url)

# 一個(gè)類(lèi)型和六個(gè)方法
# response是HTTPResponse的類(lèi)型
# print(type(response))
六個(gè)方法 read readline readlines getcode geturl getheaders
# 按照一個(gè)字節(jié)一個(gè)字節(jié)的去讀
# content = response.read()
# print(content)

# 返回多少個(gè)字節(jié)
# content = response.read(5)
# print(content)

# 讀取一行
# content = response.readline()
# print(content)

#一行一行讀,直到所有
# content = response.readlines()
# print(content)

# 返回狀態(tài)碼 如果是200了 那么就證明我們的邏輯沒(méi)有錯(cuò)
# print(response.getcode())

# 返回的是 訪問(wèn)的url地址
# print(response.geturl())

# 獲取是一個(gè) 請(qǐng)求頭狀態(tài)信息
print(response.getheaders())
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

視頻的地址;

下載爬取的東西

import urllib.request

# 下載網(wǎng)頁(yè)
# url_page = 'http://www.baidu.com'

# url代表的是下載的路徑  filename文件的名字
# 在python中 可以變量的名字  也可以直接寫(xiě)值
# urllib.request.urlretrieve(url_page,'baidu.html')

# 下載圖片
# url_img = 'https://img1.baidu.com/it/u=3004965690,4089234593&fm=26&fmt=auto&gp=0.jpg'
#
# urllib.request.urlretrieve(url= url_img,filename='lisa.jpg')

# 下載視頻
url_video = 'https://vd3.bdstatic.com/mda-mhkku4ndaka5etk3/1080p/cae_h264/1629557146541497769/mda-mhkku4ndaka5etk3.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1629687514-0-0-7ed57ed7d1168bb1f06d18a4ea214300&bcevod_channel=searchbox_feed&pd=1&pt=3&abtest='

urllib.request.urlretrieve(url_video,'hxekyyds.mp4')

7.請(qǐng)求對(duì)象的定制

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
url的組成

百度安全驗(yàn)證周杰倫

http/https www.baidu.com 80/443 s wd = 周杰倫 #

協(xié)議 主機(jī) 端口號(hào) 路徑 參數(shù) 錨點(diǎn)

常見(jiàn)端口號(hào): http 80 https 443

mysql 3306 oracle 1521 redis 6379 mongodb 27017

找ua
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

import urllib.request
url = 'https://www.baidu.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
# 因?yàn)閡rlopen方法中不能存儲(chǔ)字典 所以headers不能傳遞進(jìn)去
response = urllib.request.urlopen(url=url,headers=headers)
content = response.read().decode('utf8')
print(content)

因?yàn)閡rlopen方法中不能存儲(chǔ)字典 所以headers不能傳遞進(jìn)去

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

import urllib.request

url = 'https://www.baidu.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

# 請(qǐng)求對(duì)象的定制
# 這種參數(shù)多的要加(url= ,headers= ),不然運(yùn)行不了識(shí)別不了哪個(gè)是哪個(gè)參數(shù)
request = urllib.request.Request(url=url,headers=headers)

response = urllib.request.urlopen(request)
content = response.read().decode('utf8')

print(content)

8.編解碼

1.get請(qǐng)求:urllib.parse.quote()
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
獲取 百度安全驗(yàn)證周杰倫的網(wǎng)頁(yè)源碼

# https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6
import urllib.request
import urllib.parse
url = 'https://www.baidu.com/s?wd='
# 請(qǐng)求對(duì)象的定制為了解決反爬的第一種手段
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

# 將周杰倫三個(gè)字變成unicode編碼的格式
# 我們需要依賴于urllib.parse
name = urllib.parse.quote('周杰倫')
url = url + name

# 請(qǐng)求對(duì)象的定制
request = urllib.request.Request(url=url,headers=headers)
# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)
# 獲取響應(yīng)的內(nèi)容
content = response.read().decode('utf-8')

# 打印數(shù)據(jù)
print(content)

失敗


<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>百度安全驗(yàn)證</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
    <meta name="format-detection" content="telephone=no, email=no">
    <link rel="shortcut icon"  type="image/x-icon">
    <link rel="icon" sizes="any" mask >
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
    <link rel="stylesheet"  />
</head>
<body>
    <div class="timeout hide-callback">
        <div class="timeout-img"></div>
        <div class="timeout-title">網(wǎng)絡(luò)不給力,請(qǐng)稍后重試</div>
        <button type="button" class="timeout-button">返回首頁(yè)</button>
    </div>
    <div class="timeout-feedback hide-callback">
        <div class="timeout-feedback-icon"></div>
        <p class="timeout-feedback-title">問(wèn)題反饋</p>
    </div>

<script src="https://ppui-static-wap.cdn.bcebos.com/static/touch/js/mkdjump_v2_21d1ae1.js"></script>
</body>
</html>

進(jìn)程已結(jié)束,退出代碼0

加個(gè)Cookie成功!

【爬蟲(chóng)】如何解決爬蟲(chóng)爬取圖片時(shí)遇到百度安全驗(yàn)證的問(wèn)題?即頁(yè)面上沒(méi)有顯示圖片的源地址,沒(méi)有img標(biāo)簽,只有div標(biāo)簽


# https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6
# 需求 獲取 https://www.baidu.com/s?wd=周杰倫的網(wǎng)頁(yè)源碼
import urllib.request
import urllib.parse
url = 'https://www.baidu.com/s?wd='

# 請(qǐng)求對(duì)象的定制為了解決反爬的第一種手段
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.1.5162 SLBChan/105',
    'Cookie':'',
    #cookie你先自己登錄百度帳號(hào)就有了
    # 'Accept':'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
    # 'Accept-Encoding':'gzip, deflate, br',
    # 請(qǐng)求頭使用了Accept-Encoding ,獲取到的內(nèi)容為壓縮后的內(nèi)容,使得后面解碼utf錯(cuò)誤
    # 'Accept-Language':'zh-CN,zh;q=0.9'
}

# 將周杰倫三個(gè)字變成unicode編碼的格式
# 我們需要依賴于urllib.parse
name = urllib.parse.quote('周杰倫')
url = url + name

# 請(qǐng)求對(duì)象的定制
request = urllib.request.Request(url=url,headers=headers)
# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)
# 獲取響應(yīng)的內(nèi)容
content = response.read().decode('utf-8')

# 打印數(shù)據(jù)
print(content)
  1. get:urllib.parse.urlencode() 多參數(shù)

urlencode應(yīng)用場(chǎng)景:多個(gè)參數(shù)的時(shí)候

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

#https://www.baidu.com/s?wd=周杰倫&sex=男
import urllib.parse
data = {
    'wd':'周杰倫',
    'sex':'男',
    'location':'中國(guó)臺(tái)灣省'
}
a = urllib.parse.urlencode(data)
print(a)
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
獲取百度安全驗(yàn)證的網(wǎng)頁(yè)源碼

加上Cookie成功!


import urllib.request
import urllib.parse

base_url = 'https://www.baidu.com/s?'

data = {
    'wd':'周杰倫',
    'sex':'男',
    'location':'中國(guó)臺(tái)灣省'
}
new_data = urllib.parse.urlencode(data)

# 請(qǐng)求資源路徑
url = base_url + new_data
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
? ? 'Cookie':'',
}

# 請(qǐng)求對(duì)象的定制
request = urllib.request.Request(url=url,headers=headers)
# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)
# 獲取網(wǎng)頁(yè)源碼的數(shù)據(jù)
content = response.read().decode('utf-8')

# 打印數(shù)據(jù)
print(content)
  1. post請(qǐng)求
百度翻譯

翻譯 發(fā)送了很多請(qǐng)求,找獲取數(shù)據(jù)的 接口

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

post請(qǐng)求方式的參數(shù) 必須編碼 data = urllib.parse.urlencode(data)

編碼之后 必須調(diào)用encode方法 data = urllib.parse.urlencode(data).encode('utf-8')

參數(shù)是放在請(qǐng)求對(duì)象定制的方法

request = urllib.request.Request (url=url,data=data, headers=headers )


import urllib.request
import urllib.parse

url = 'https://fanyi.baidu.com/sug'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
data = {
    'kw':'spider'
}

# post請(qǐng)求的參數(shù) 必須要進(jìn)行編碼
data = urllib.parse.urlencode(data).encode('utf-8')

# post的請(qǐng)求的參數(shù) 是不會(huì)拼接在url的后面的  而是需要放在請(qǐng)求對(duì)象定制的參數(shù)中
# post請(qǐng)求的參數(shù) 必須要進(jìn)行編碼.encode('utf-8')
request = urllib.request.Request(url=url,data=data,headers=headers)

# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)

# 獲取響應(yīng)的數(shù)據(jù)
content = response.read().decode('utf-8')

# 字符串--》json對(duì)象
import json

obj = json.loads(content)
print(obj)

結(jié)果:

{'errno': 0, 'data': [{'k': 'spider', 'v': 'n. 蜘蛛; 星形輪,十字叉; 帶柄三腳平底鍋; 三腳架'}, {'k': 'Spider', 'v': '[電影]蜘蛛'}, {'k': 'SPIDER', 'v': 'abbr. SEMATECH process induced damage effect revea'}, {'k': 'spiders', 'v': 'n. 蜘蛛( spider的名詞復(fù)數(shù) )'}, {'k': 'spidery', 'v': 'adj. 像蜘蛛腿一般細(xì)長(zhǎng)的; 象蜘蛛網(wǎng)的,十分精致的'}]}
post和get區(qū)別
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
百度詳細(xì)翻譯
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

import urllib.request
import urllib.parse

url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'


headers = {
    # 'Accept': '*/*',
    # 'Accept-Encoding': 'gzip, deflate, br',
? ? ? ? 上面這行 接收的編碼格式一定要注釋掉
    # 'Accept-Language': 'zh-CN,zh;q=0.9',
    # 'Connection': 'keep-alive',
    # 'Content-Length': '135',
    # 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
   ? ? 只要Cookie其實(shí)就行
? ?  'Cookie': 'BIDUPSID=DAA8F9F0BD801A2929D96D69CF7EBF50; PSTM=1597202227; BAIDUID=DAA8F9F0BD801A29B2813502000BF8E9:SL=0:NR=10:FG=1; __yjs_duid=1_c19765bd685fa6fa12c2853fc392f8db1618999058029; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; BDUSS=R2bEZvTjFCNHQxdUV-cTZ-MzZrSGxhbUYwSkRkUWk2SkxxS3E2M2lqaFRLUlJoRVFBQUFBJCQAAAAAAAAAAAEAAAA3e~BTveK-9sHLZGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFOc7GBTnOxgaW; BDUSS_BFESS=R2bEZvTjFCNHQxdUV-cTZ-MzZrSGxhbUYwSkRkUWk2SkxxS3E2M2lqaFRLUlJoRVFBQUFBJCQAAAAAAAAAAAEAAAA3e~BTveK-9sHLZGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFOc7GBTnOxgaW; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=DAA8F9F0BD801A29B2813502000BF8E9:SL=0:NR=10:FG=1; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; PSINO=2; H_PS_PSSID=34435_31660_34405_34004_34073_34092_26350_34426_34323_22158_34390; delPer=1; BA_HECTOR=8185a12020018421b61gi6ka20q; BCLID=10943521300863382545; BDSFRCVID=boDOJexroG0YyvRHKn7hh7zlD_weG7bTDYLEOwXPsp3LGJLVJeC6EG0Pts1-dEu-EHtdogKK0mOTHv8F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tR3aQ5rtKRTffjrnhPF3-44vXP6-hnjy3bRkX4Q4Wpv_Mnndjn6SQh4Wbttf5q3RymJ42-39LPO2hpRjyxv4y4Ldj4oxJpOJ-bCL0p5aHl51fbbvbURvD-ug3-7qqU5dtjTO2bc_5KnlfMQ_bf--QfbQ0hOhqP-jBRIE3-oJqC8hMIt43f; BCLID_BFESS=10943521300863382545; BDSFRCVID_BFESS=boDOJexroG0YyvRHKn7hh7zlD_weG7bTDYLEOwXPsp3LGJLVJeC6EG0Pts1-dEu-EHtdogKK0mOTHv8F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=tR3aQ5rtKRTffjrnhPF3-44vXP6-hnjy3bRkX4Q4Wpv_Mnndjn6SQh4Wbttf5q3RymJ42-39LPO2hpRjyxv4y4Ldj4oxJpOJ-bCL0p5aHl51fbbvbURvD-ug3-7qqU5dtjTO2bc_5KnlfMQ_bf--QfbQ0hOhqP-jBRIE3-oJqC8hMIt43f; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1629701482,1629702031,1629702343,1629704515; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1629704515; __yjs_st=2_MDBkZDdkNzg4YzYyZGU2NTM5NzBjZmQ0OTZiMWRmZGUxM2QwYzkwZTc2NTZmMmIxNDJkYzk4NzU1ZDUzN2U3Yjc4ZTJmYjE1YTUzMTljYWFkMWUwYmVmZGEzNmZjN2FlY2M3NDAzOThhZTY5NzI0MjVkMmQ0NWU3MWE1YTJmNGE5NDBhYjVlOWY3MTFiMWNjYTVhYWI0YThlMDVjODBkNWU2NjMwMzY2MjFhZDNkMzVhNGMzMGZkMWY2NjU5YzkxMDk3NTEzODJiZWUyMjEyYTk5YzY4ODUyYzNjZTJjMGM5MzhhMWE5YjU3NTM3NWZiOWQxNmU3MDVkODExYzFjN183XzliY2RhYjgz; ab_sr=1.0.1_ZTc2ZDFkMTU5ZTM0ZTM4MWVlNDU2MGEzYTM4MzZiY2I2MDIxNzY1Nzc1OWZjZGNiZWRhYjU5ZjYwZmNjMTE2ZjIzNmQxMTdiMzIzYTgzZjVjMTY0ZjM1YjMwZTdjMjhiNDRmN2QzMjMwNWRhZmUxYTJjZjZhNTViMGM2ODFlYjE5YTlmMWRjZDAwZGFmMDY4ZTFlNGJiZjU5YzE1MGIxN2FiYTU3NDgzZmI4MDdhMDM5NTQ0MjQxNDBiNzdhMDdl',
    # 'Host': 'fanyi.baidu.com',
    # 'Origin': 'https://fanyi.baidu.com',
    # 'Referer': 'https://fanyi.baidu.com/?aldtype=16047',
    # 'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
    # 'sec-ch-ua-mobile': '?0',
    # 'Sec-Fetch-Dest': 'empty',
    # 'Sec-Fetch-Mode': 'cors',
    # 'Sec-Fetch-Site': 'same-origin',
    # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    # 'X-Requested-With': 'XMLHttpRequest',
}

data = {
    'from': 'en',
    'to': 'zh',
    'query': 'love',
    'transtype': 'realtime',
    'simple_means_flag': '3',
    'sign': '198772.518981',
    'token': '5483bfa652979b41f9c90d91f3de875d',
    'domain': 'common',
}
# post請(qǐng)求的參數(shù)  必須進(jìn)行編碼 并且要調(diào)用encode方法
data = urllib.parse.urlencode(data).encode('utf-8')

# 請(qǐng)求對(duì)象的定制
request = urllib.request.Request(url = url,data = data,headers = headers)

# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)

# 獲取響應(yīng)的數(shù)據(jù)
content = response.read().decode('utf-8')

import json

obj = json.loads(content)
print(obj)

9.ajax的get請(qǐng)求

案例:爬取豆瓣電影前10頁(yè)數(shù)據(jù)
獲取豆瓣電影的第一頁(yè)的數(shù)據(jù) 并且保存起來(lái)

找接口

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

# get請(qǐng)求
import urllib.request

url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

# (1) 請(qǐng)求對(duì)象的定制
request = urllib.request.Request(url=url,headers=headers)

# (2)獲取響應(yīng)的數(shù)據(jù)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')

# (3) 數(shù)據(jù)下載到本地
# open方法默認(rèn)情況下使用的是gbk的編碼  
# 如果我們要想保存漢字 那么需要在open方法中指定編碼格式為utf-8
# encoding = 'utf-8'
# 22 23行和 25 26行效果一樣
# fp = open('douban.json','w',encoding='utf-8')
# fp.write(content)

with open('douban1.json','w',encoding='utf-8') as fp:
    fp.write(content)
下載豆瓣電影前10頁(yè)的數(shù)據(jù)

# https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

第二頁(yè)接口

# https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=20&limit=20

# https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=40&limit=20

# https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=60&limit=20

page 1 2 3 4

start 0 20 40 60

規(guī)律: start數(shù)值其實(shí)= (page - 1)*20


# 下載豆瓣電影前10頁(yè)的數(shù)據(jù)
# (1) 請(qǐng)求對(duì)象的定制
# (2) 獲取響應(yīng)的數(shù)據(jù)
# (3) 下載數(shù)據(jù)

import urllib.parse
import urllib.request

#  每一頁(yè)都有自己的請(qǐng)求對(duì)象的定制
def create_request(page):
    base_url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&'

    data = {
        'start':(page - 1) * 20,
        'limit':20
    }

    data = urllib.parse.urlencode(data) 
    url = base_url + data

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    }

    request = urllib.request.Request(url=url,headers=headers)
    return request

#         獲取響應(yīng)的數(shù)據(jù)
def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content

# 下載
def down_load(page,content):
    with open('douban_' + str(page) + '.json','w',encoding='utf-8')as fp:
        fp.write(content)

# 程序的入口
if __name__ == '__main__':
    start_page = int(input('請(qǐng)輸入起始的頁(yè)碼'))
    end_page = int(input('請(qǐng)輸入結(jié)束的頁(yè)面'))

    for page in range(start_page,end_page+1):# 左閉右開(kāi)
#         每一頁(yè)都有自己的請(qǐng)求對(duì)象的定制
        request = create_request(page)
#         獲取響應(yīng)的數(shù)據(jù)
        content = get_content(request)
#         下載
        down_load(page,content)

10.ajax的post請(qǐng)求

案例:KFC官網(wǎng) 北京哪里有kfc&前十頁(yè)數(shù)據(jù)
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
1頁(yè)
http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
post
cname: 北京
pid:
pageIndex: 1
pageSize: 10

2頁(yè)
http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
post
cname: 北京
pid:
pageIndex: 2
pageSize: 10

import urllib.request
import urllib.parse

def create_request(page):
    base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'

    data = {
        'cname': '北京',
        'pid':'',
        'pageIndex': page,
        'pageSize': '10'
    }

    data = urllib.parse.urlencode(data).encode('utf-8')

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    }

    request = urllib.request.Request(url=base_url,headers=headers,data=data)

    return request

def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content


def down_load(page,content):
    with open('kfc_' + str(page) + '.json','w',encoding='utf-8')as fp:
        fp.write(content)

if __name__ == '__main__':
    start_page = int(input('請(qǐng)輸入起始頁(yè)碼'))
    end_page = int(input('請(qǐng)輸入結(jié)束頁(yè)碼'))

    for page in range(start_page,end_page+1):
        # 請(qǐng)求對(duì)象的定制
        request = create_request(page)
        # 獲取網(wǎng)頁(yè)源碼
        content = get_content(request)
        # 下載
        down_load(page,content)

11.URLError\HTTPError

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

import urllib.request
import urllib.error

#HTTPError
# url = 'https://blog.csdn.net/sulixu/article/details/1198189491'

#URLError
url = 'http://www.doudan1111.com'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

try:
    request = urllib.request.Request(url = url, headers = headers)

    response = urllib.request.urlopen(request)

    content = response.read().decode('utf-8')

    print(content)
except urllib.error.HTTPError:
    print('系統(tǒng)正在升級(jí)。。。')
except urllib.error.URLError:
    print('我都說(shuō)了 系統(tǒng)正在升級(jí)。。。')

12.cookie登錄

適用的場(chǎng)景數(shù)據(jù)采集的時(shí)候 需要繞過(guò)登陸 然后進(jìn)入到某個(gè)頁(yè)

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

個(gè)人信息頁(yè)面是utf-8 但是還報(bào)錯(cuò)了編碼錯(cuò)誤

因?yàn)椴](méi)有進(jìn)入到個(gè)人信息頁(yè)面 而是跳轉(zhuǎn)到了登陸頁(yè)面,而登陸頁(yè)面不是utf-8 所以報(bào)錯(cuò)

什么情況下訪問(wèn)不成功? 因?yàn)?span style="background-color:#f8d7b7;">請(qǐng)求頭的信息不夠 所以訪問(wèn)不成功

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
案例:weibo登陸

import urllib.request

url = 'https://weibo.cn/6451491586/info'

headers = {
# ':authority': 'weibo.cn',
# ':method': 'GET',
# ':path': '/6451491586/info',
# ':scheme': 'https',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
# 'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'max-age=0',
     cookie中攜帶著你的登陸信息   如果有登陸之后的cookie  那么我們就可以攜帶著cookie進(jìn)入到任何頁(yè)面
'cookie': '_T_WM=24c44910ba98d188fced94ba0da5960e; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFxxfgNNUmXi4YiaYZKr_J_5NHD95QcSh-pSh.pSKncWs4DqcjiqgSXIgvVPcpD; SUB=_2A25MKKG_DeRhGeBK7lMV-S_JwzqIHXVv0s_3rDV6PUJbktCOLXL2kW1NR6e0UHkCGcyvxTYyKB2OV9aloJJ7mUNz; SSOLoginState=1630327279',
     referer  判斷當(dāng)前路徑是不是由上一個(gè)路徑進(jìn)來(lái)的    一般情況下 是做圖片防盜鏈
'referer': 'https://weibo.cn/',
'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
}
# 請(qǐng)求對(duì)象的定制
request = urllib.request.Request(url=url,headers=headers)
# 模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求
response = urllib.request.urlopen(request)
# 獲取響應(yīng)的數(shù)據(jù)
content = response.read().decode('utf-8')

# 將數(shù)據(jù)保存到本地
with open('weibo.html','w',encoding='utf-8')as fp:
    fp.write(content)

失敗

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
作業(yè):qq空間的爬取

13.Handler處理器

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
需求 使用handler來(lái)訪問(wèn)百度 獲取網(wǎng)頁(yè)源碼

import urllib.request

url = 'http://www.baidu.com'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

request = urllib.request.Request(url = url,headers = headers)

# handler   build_opener  open

# (1)獲取hanlder對(duì)象
handler = urllib.request.HTTPHandler()

# (2)獲取opener對(duì)象
opener = urllib.request.build_opener(handler)

# (3) 調(diào)用open方法
response = opener.open(request)

content = response.read().decode('utf-8')

print(content)

14. 代理服務(wù)器

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

免費(fèi)的用不了,買(mǎi)一個(gè)

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
查ip地址

import urllib.request

url = 'http://www.baidu.com/s?wd=ip'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

# 請(qǐng)求對(duì)象的定制
request = urllib.request.Request(url = url,headers= headers)

# 模擬瀏覽器訪問(wèn)服務(wù)器
# response = urllib.request.urlopen(request)

# 代理ip
proxies = {
    'http':'118.24.219.151:16817'
}
# handler  build_opener  open
handler = urllib.request.ProxyHandler(proxies = proxies)

opener = urllib.request.build_opener(handler)

response = opener.open(request)

# 獲取響應(yīng)的信息
content = response.read().decode('utf-8')

# 保存
with open('daili.html','w',encoding='utf-8')as fp:
    fp.write(content)
代理池

import urllib.request

proxies_pool = [
    {'http':'118.24.219.151:16817'},
    {'http':'118.24.219.151:16817'},
]

import random
# 隨機(jī)從代理池選擇
proxies = random.choice(proxies_pool)

url = 'http://www.baidu.com/s?wd=ip'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

request = urllib.request.Request(url = url,headers=headers)

handler = urllib.request.ProxyHandler(proxies=proxies)

opener = urllib.request.build_opener(handler)

response = opener.open(request)

content = response.read().decode('utf-8')

with open('daili.html','w',encoding='utf-8')as fp:
    fp.write(content)

解析

1.xpath(Ctrl+shift+x)

xpath使用:
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

安裝lxml庫(kù)要到解釋器的Scripts文件夾下面:

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
xpath基本語(yǔ)法:

調(diào)出xpath窗口后,shift按住,移動(dòng)鼠標(biāo)到指定目標(biāo),可以快速自動(dòng)獲取目標(biāo)xpath路徑

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
    <ul>
        <li id="l1" class="c1">北京</li>
        <li id="l2">上海</li>
        <li id="c3">深圳</li>
        <li id="c4">武漢</li>
    </ul>
<!--    <ul>-->
<!--        <li>大連</li>-->
<!--        <li>錦州</li>-->
<!--        <li>沈陽(yáng)</li>-->
<!--    </ul>-->
</body>
</html>

xpath解析

(1)本地文件 etree.parse

(2)解析服務(wù)器響應(yīng)的數(shù)據(jù) response.read().decode('utf-8') ***** etree.HTML()


from lxml import etree

# xpath解析本地文件
tree = etree.parse('070_尚硅谷_爬蟲(chóng)_解析_xpath的基本使用.html')

#tree.xpath('xpath路徑')

# 查找ul下面的li
# li_list = tree.xpath('//body/ul/li')

# 查找所有有id的屬性的li標(biāo)簽
# text()獲取標(biāo)簽中的內(nèi)容
# li_list = tree.xpath('//ul/li[@id]/text()')
# ['北京', '上海', '深圳', '武漢']

# 找到id為l1的li標(biāo)簽  注意引號(hào)的問(wèn)題
# li_list = tree.xpath('//ul/li[@id="l1"]/text()')
# ['北京']

# 查找到id為l1的li標(biāo)簽的class的屬性值
# li = tree.xpath('//ul/li[@id="l1"]/@class')
# ['c1']

# 查詢id中包含l的li標(biāo)簽
# li_list = tree.xpath('//ul/li[contains(@id,"l")]/text()')
# ['北京', '上海']

# 查詢id的值以l開(kāi)頭的li標(biāo)簽
# li_list = tree.xpath('//ul/li[starts-with(@id,"c")]/text()')

#查詢id為l1和class為c1的
# li_list = tree.xpath('//ul/li[@id="l1" and @class="c1"]/text()')
# ['北京']

li_list = tree.xpath('//ul/li[@id="l1"]/text() | //ul/li[@id="l2"]/text()')
# ['北京', '上海']

# 判斷列表的長(zhǎng)度
print(li_list)
print(len(li_list))
獲取百度網(wǎng)站的 百度一下

xpath插件找 對(duì)應(yīng)xpath路徑 <input>類(lèi)型,id=su;

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

# (1) 獲取網(wǎng)頁(yè)的源碼
# (2) 解析   解析的服務(wù)器響應(yīng)的文件  etree.HTML
# (3)  打印
import urllib.request

url = 'https://www.baidu.com/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

# 請(qǐng)求對(duì)象的定制
request = urllib.request.Request(url = url,headers = headers)

# 模擬瀏覽器訪問(wèn)服務(wù)器
response = urllib.request.urlopen(request)

# 獲取網(wǎng)頁(yè)源碼
content = response.read().decode('utf-8')

# 解析網(wǎng)頁(yè)源碼 來(lái)獲取我們想要的數(shù)據(jù)
from lxml import etree

# 解析服務(wù)器響應(yīng)的文件
tree = etree.HTML(content)

# 獲取想要的數(shù)據(jù)  xpath的返回值是一個(gè)列表類(lèi)型的數(shù)據(jù)
result = tree.xpath('//input[@id="su"]/@value')[0]

print(result)
站長(zhǎng)素材圖片抓取并且下載(帥哥圖片、帥哥圖片大全_站長(zhǎng)素材)

--》懶加載 一般設(shè)計(jì)圖片的網(wǎng)站都會(huì)進(jìn)行懶加載 用@src2

需求 下載的前十頁(yè)的圖片

# 情侶圖片、情侶圖片大全_站長(zhǎng)素材 第一頁(yè)

# 情侶圖片、情侶圖片大全_站長(zhǎng)素材 第二頁(yè)

# https://sc.chinaz.com/tupian/qinglvtupian_page.html 第n頁(yè)


# (1) 請(qǐng)求對(duì)象的定制
# (2)獲取網(wǎng)頁(yè)的源碼
# (3)下載

import urllib.request
from lxml import etree

 # (1) 請(qǐng)求對(duì)象的定制
def create_request(page):
    if(page == 1):
        url = 'https://sc.chinaz.com/tupian/qinglvtupian.html'
    else:
        url = 'https://sc.chinaz.com/tupian/qinglvtupian_' + str(page) + '.html'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    }

    request = urllib.request.Request(url = url, headers = headers)
    return request

# (2)獲取網(wǎng)頁(yè)的源碼
def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content

def down_load(content):
#     下載圖片
    # urllib.request.urlretrieve('圖片地址','文件的名字')
    tree = etree.HTML(content)

# 圖片名字
    name_list = tree.xpath('//div[@id="container"]//a/img/@alt')

    # 一般設(shè)計(jì)圖片的網(wǎng)站都會(huì)進(jìn)行懶加載
    src_list = tree.xpath('//div[@id="container"]//a/img/@src2')

    for i in range(len(name_list)):
        name = name_list[i]
        src = src_list[i]
        url = 'https:' + src

        urllib.request.urlretrieve(url=url,filename='./loveImg/' + name + '.jpg')

if __name__ == '__main__':
    start_page = int(input('請(qǐng)輸入起始頁(yè)碼'))
    end_page = int(input('請(qǐng)輸入結(jié)束頁(yè)碼'))

    for page in range(start_page,end_page+1):
        # (1) 請(qǐng)求對(duì)象的定制
        request = create_request(page)
        # (2)獲取網(wǎng)頁(yè)的源碼
        content = get_content(request)
        # (3)下載
        down_load(content)
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
一直爬取失敗,后來(lái)打印了content 發(fā)現(xiàn)爬取的源碼和真實(shí)源碼不同:
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)
return content

失敗了一個(gè)多小時(shí)捏! 但是xpath路徑確實(shí)會(huì)找了

那爬的源碼和實(shí)際源碼不一樣咋解決呢?

差點(diǎn)放棄,看彈幕里的//@data-original想起來(lái),直接去爬到的源碼里xpath不就得了?

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

import urllib.request
from lxml import etree
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

def create_request(page):
    if(page == 1):
        url = 'https://sc.chinaz.com/tupian/qinglvtupian.html'
    else:
        url = 'https://sc.chinaz.com/tupian/qinglvtupian_' + str(page) + '.html'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    }

    request = urllib.request.Request(url = url, headers = headers)
    return request

def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    # print(content)
    return content

def down_load(content):
#     下載圖片
    # urllib.request.urlretrieve('圖片地址','文件的名字')
    tree = etree.HTML(content)
    name_list = tree.xpath('/html/body/div[3]/div[2]/div/img/@alt')
    # 一般設(shè)計(jì)圖片的網(wǎng)站都會(huì)進(jìn)行懶加載
     src_list = tree.xpath('//@data-original')
     for i in range(len(name_list)):
        name = name_list[i]
        src = src_list[i]
        url = 'https:' + src
        # print(url)
        urllib.request.urlretrieve(url=url,filename='./loveImg/' + name + '.jpg')

if __name__ == '__main__':
    start_page = int(input('請(qǐng)輸入起始頁(yè)碼'))
    end_page = int(input('請(qǐng)輸入結(jié)束頁(yè)碼'))

    for page in range(start_page,end_page+1):
        # (1) 請(qǐng)求對(duì)象的定制
        request = create_request(page)
        # (2)獲取網(wǎng)頁(yè)的源碼
        content = get_content(request)
        # (3)下載
        down_load(content)

成功?。?!

2.JsonPath 只能解析本地文件

jsonpath的安裝及使用方式

pip安裝:pip install jsonpath

jsonpath的使用:

obj = json.load(open('json文件', 'r', encoding='utf‐8'))

ret = jsonpath.jsonpath(obj, 'jsonpath語(yǔ)法')

教程連接(JSONPath-簡(jiǎn)單入門(mén))
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

import json
import jsonpath

obj = json.load(open('073_尚硅谷_爬蟲(chóng)_解析_jsonpath.json','r',encoding='utf-8'))

# 書(shū)店所有書(shū)的作者
# author_list = jsonpath.jsonpath(obj,'$.store.book[*].author')
# print(author_list)

# 所有的作者
# author_list = jsonpath.jsonpath(obj,'$..author')
# print(author_list)

# store下面的所有的元素
# tag_list = jsonpath.jsonpath(obj,'$.store.*')
# print(tag_list)

# store里面所有東西的price
# price_list = jsonpath.jsonpath(obj,'$.store..price')
# print(price_list)

# 第三個(gè)書(shū)
# book = jsonpath.jsonpath(obj,'$..book[2]')
# print(book)

# 最后一本書(shū)
# book = jsonpath.jsonpath(obj,'$..book[(@.length-1)]')
# print(book)

#     前面的兩本書(shū)
# book_list = jsonpath.jsonpath(obj,'$..book[0,1]')
# book_list = jsonpath.jsonpath(obj,'$..book[:2]')
# print(book_list)

# 條件過(guò)濾需要在()的前面添加一個(gè)?
#      過(guò)濾出所有的包含isbn的書(shū)。
# book_list = jsonpath.jsonpath(obj,'$..book[?(@.isbn)]')
# print(book_list)


# 哪本書(shū)超過(guò)了10塊錢(qián)
book_list = jsonpath.jsonpath(obj,'$..book[?(@.price>10)]')
print(book_list)
案例練習(xí):淘票票
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

帶冒號(hào):的請(qǐng)求頭一般 是 不好使的

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

最開(kāi)始jonsp和后面的)是不要的;split 切割

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

import urllib.request

url = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1629789477003_137&jsoncallback=jsonp138&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'

headers = {
    # ':authority': 'dianying.taobao.com',
    # ':method': 'GET',
    # ':path': '/cityAction.json?activityId&_ksTS=1629789477003_137&jsoncallback=jsonp138&action=cityAction&n_s=new&event_submit_doGetAllRegion=true',
    # ':scheme': 'https',
    'accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
    # 'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9',
    'cookie': 'cna=UkO6F8VULRwCAXTqq7dbS5A8; miid=949542021157939863; sgcookie=E100F01JK9XMmyoZRigjfmZKExNdRHQqPf4v9NIWIC1nnpnxyNgROLshAf0gz7lGnkKvwCnu1umyfirMSAWtubqc4g%3D%3D; tracknick=action_li; _cc_=UIHiLt3xSw%3D%3D; enc=dA18hg7jG1xapfVGPHoQCAkPQ4as1%2FEUqsG4M6AcAjHFFUM54HWpBv4AAm0MbQgqO%2BiZ5qkUeLIxljrHkOW%2BtQ%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; thw=cn; _m_h5_tk=3ca69de1b9ad7dce614840fcd015dcdb_1629776735568; _m_h5_tk_enc=ab56df54999d1d2cac2f82753ae29f82; t=874e6ce33295bf6b95cfcfaff0af0db6; xlly_s=1; cookie2=13acd8f4dafac4f7bd2177d6710d60fe; v=0; _tb_token_=e65ebbe536158; tfstk=cGhRB7mNpnxkDmUx7YpDAMNM2gTGZbWLxUZN9U4ulewe025didli6j5AFPI8MEC..; l=eBrgmF1cOsMXqSxaBO5aFurza77tzIRb8sPzaNbMiInca6OdtFt_rNCK2Ns9SdtjgtfFBetPVKlOcRCEF3apbgiMW_N-1NKDSxJ6-; isg=BBoas2yXLzHdGp3pCh7XVmpja8A8S54lyLj1RySTHq14l7vRDNufNAjpZ2MLRxa9',
    'referer': 'https://dianying.taobao.com/',
    'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
    'sec-ch-ua-mobile': '?0',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    'x-requested-with': 'XMLHttpRequest',
}

request = urllib.request.Request(url = url, headers = headers)

response = urllib.request.urlopen(request)

content = response.read().decode('utf-8')

# split 切割
content = content.split('(')[1].split(')')[0]

with open('074_尚硅谷_爬蟲(chóng)_解析_jsonpath解析淘票票.json','w',encoding='utf-8')as fp:
    fp.write(content)

import json
import jsonpath
# 加載文件
obj = json.load(open('074_尚硅谷_爬蟲(chóng)_解析_jsonpath解析淘票票.json','r',encoding='utf-8'))

city_list = jsonpath.jsonpath(obj,'$..regionName')

print(city_list)

作業(yè): 1.股票信息提?。ㄐ星橹行腳證券之星_提供全面的股票行情,基金數(shù)據(jù),期貨外匯黃金行情等服務(wù))

2.boos直聘

3.中華英才

4.汽車(chē)之家

3.BeautifulSoup(跳過(guò)了)

看了這條評(píng)論:可以跳過(guò) 爬蟲(chóng)2年沒(méi)用過(guò)這個(gè)

1.基本簡(jiǎn)介

1.BeautifulSoup簡(jiǎn)稱: bs4

2.什么是BeatifulSoup?

BeautifulSoup,和lxml一樣,是一個(gè)html的解析器,主要功能也是解析和提取數(shù)據(jù)

3.優(yōu)缺點(diǎn)?

缺點(diǎn):效率沒(méi)有l(wèi)xml的效率高

優(yōu)點(diǎn):接口設(shè)計(jì)人性化,使用方便

2.安裝以及創(chuàng)建

1.安裝

pip install bs4

2.導(dǎo)入

from bs4 import BeautifulSoup

3.創(chuàng)建對(duì)象

服務(wù)器響應(yīng)的文件生成對(duì)象

soup = BeautifulSoup(response.read().decode(), 'lxml')

本地文件生成對(duì)象

soup = BeautifulSoup(open('1.html'), 'lxml')

類(lèi)似于xpath;

注意:默認(rèn)打開(kāi)文件的編碼格式gbk所以需要指定打開(kāi)編碼格式

通過(guò)解析本地文件 來(lái)將bs4的基礎(chǔ)語(yǔ)法進(jìn)行講解

默認(rèn)打開(kāi)的文件的編碼格式是gbk 所以在打開(kāi)文件的時(shí)候需要指定編碼


from bs4 import BeautifulSoup

# 通過(guò)解析本地文件 來(lái)將bs4的基礎(chǔ)語(yǔ)法進(jìn)行講解
# 默認(rèn)打開(kāi)的文件的編碼格式是gbk 所以在打開(kāi)文件的時(shí)候需要指定編碼
soup = BeautifulSoup(open('075_尚硅谷_爬蟲(chóng)_解析_bs4的基本使用.html',encoding='utf-8'),'lxml')

# 根據(jù)標(biāo)簽名查找節(jié)點(diǎn)
# 找到的是第一個(gè)符合條件的數(shù)據(jù)
# print(soup.a)
# 獲取標(biāo)簽的屬性和屬性值
# print(soup.a.attrs)

# bs4的一些函數(shù)
# (1)find
# 返回的是第一個(gè)符合條件的數(shù)據(jù)
# print(soup.find('a'))

# 根據(jù)title的值來(lái)找到對(duì)應(yīng)的標(biāo)簽對(duì)象
# print(soup.find('a',title="a2"))

# 根據(jù)class的值來(lái)找到對(duì)應(yīng)的標(biāo)簽對(duì)象  注意的是class需要添加下劃線
# print(soup.find('a',class_="a1"))


# (2)find_all  返回的是一個(gè)列表 并且返回了所有的a標(biāo)簽
# print(soup.find_all('a'))

# 如果想獲取的是多個(gè)標(biāo)簽的數(shù)據(jù) 那么需要在find_all的參數(shù)中添加的是列表的數(shù)據(jù)
# print(soup.find_all(['a','span']))

# limit的作用是查找前幾個(gè)數(shù)據(jù)
# print(soup.find_all('li',limit=2))


# (3)select(推薦)
# select方法返回的是一個(gè)列表  并且會(huì)返回多個(gè)數(shù)據(jù)
# print(soup.select('a'))

# 可以通過(guò).代表class  我們把這種操作叫做類(lèi)選擇器
# print(soup.select('.a1'))

# print(soup.select('#l1'))

# 屬性選擇器---通過(guò)屬性來(lái)尋找對(duì)應(yīng)的標(biāo)簽
# 查找到li標(biāo)簽中有id的標(biāo)簽
# print(soup.select('li[id]'))

# 查找到li標(biāo)簽中id為l2的標(biāo)簽
# print(soup.select('li[id="l2"]'))

# 層級(jí)選擇器
#  后代選擇器
# 找到的是div下面的li
# print(soup.select('div li'))

# 子代選擇器
#  某標(biāo)簽的第一級(jí)子標(biāo)簽
# 注意:很多的計(jì)算機(jī)編程語(yǔ)言中 如果不加空格不會(huì)輸出內(nèi)容  但是在bs4中 不會(huì)報(bào)錯(cuò) 會(huì)顯示內(nèi)容
# print(soup.select('div > ul > li'))

# 找到a標(biāo)簽和li標(biāo)簽的所有的對(duì)象
# print(soup.select('a,li'))

# 節(jié)點(diǎn)信息
#    獲取節(jié)點(diǎn)內(nèi)容
# obj = soup.select('#d1')[0]
# 如果標(biāo)簽對(duì)象中 只有內(nèi)容 那么string和get_text()都可以使用
# 如果標(biāo)簽對(duì)象中 除了內(nèi)容還有標(biāo)簽 那么string就獲取不到數(shù)據(jù) 而get_text()是可以獲取數(shù)據(jù)
# 我們一般情況下  推薦使用get_text()
# print(obj.string)
# print(obj.get_text())

# 節(jié)點(diǎn)的屬性
# obj = soup.select('#p1')[0]
# name是標(biāo)簽的名字
# print(obj.name)
# 將屬性值左右一個(gè)字典返回
# print(obj.attrs)

# 獲取節(jié)點(diǎn)的屬性
obj = soup.select('#p1')[0]

print(obj.attrs.get('class'))
print(obj.get('class'))
print(obj['class'])
3.節(jié)點(diǎn)定位

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
4.節(jié)點(diǎn)信息
Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath

應(yīng)用實(shí)例: 1.股票信息提?。ㄐ星橹行腳證券之星_提供全面的股票行情,基金數(shù)據(jù),期貨外匯黃金行情等服務(wù))

2.中華英才網(wǎng)-舊版

3 .騰訊公司招聘需求抓?。ㄊ醉?yè) | 騰訊招聘)

bs4爬取星巴克數(shù)據(jù).py

import urllib.request

url = 'https://www.starbucks.com.cn/menu/'

response = urllib.request.urlopen(url)

content = response.read().decode('utf-8')


from bs4 import BeautifulSoup

soup = BeautifulSoup(content,'lxml')

# //ul[@class="grid padded-3 product"]//strong/text()
name_list = soup.select('ul[class="grid padded-3 product"] strong')

for name in name_list:
    print(name.get_text())

Selenium

1.Selenium (過(guò)程有點(diǎn)慢)

1.什么是selenium?

(1)Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。

(2)Selenium 測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。

(3)支持通過(guò)各種driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驅(qū)動(dòng)真實(shí)瀏覽器測(cè)試

(4)selenium也是支持無(wú)界面瀏覽器操作的。

2.為什么使用selenium?

模擬瀏覽器功能,自動(dòng)執(zhí)行網(wǎng)頁(yè)中的js代碼,實(shí)現(xiàn)動(dòng)態(tài)加載

3.如何安裝selenium?

(1)操作谷歌瀏覽器驅(qū)動(dòng)下載地址

http://chromedriver.storage.googleapis.com/index.html

(2)谷歌驅(qū)動(dòng)和谷歌瀏覽器版本之間的映射表(沒(méi)啥用了,現(xiàn)在版本已經(jīng)停更映射表

selenium之 chromedriver與chrome版本映射表(更新至v2.46)_selenium版本對(duì)應(yīng)chrome_huilan_same的博客-CSDN博客

(3)查看谷歌瀏覽器版本

谷歌瀏覽器右上角‐‐>幫助‐‐>關(guān)于

(4)pip install selenium

4.selenium的使用步驟?

(1)導(dǎo)入:from selenium import webdriver

(2)創(chuàng)建谷歌瀏覽器操作對(duì)象:

path = 谷歌瀏覽器驅(qū)動(dòng)文件路徑

browser = webdriver.Chrome(path)

(3)訪問(wèn)網(wǎng)址

url = 要訪問(wèn)的網(wǎng)址

browser.get(url)

常見(jiàn)使用報(bào)錯(cuò)原因

4.0+會(huì)自動(dòng)裝載path無(wú)需寫(xiě)入?yún)?shù)!但報(bào)錯(cuò)不會(huì)影響網(wǎng)頁(yè)爬取

注意!如果你下載的seleninum是4.0+!path寫(xiě)了會(huì)報(bào)錯(cuò)

如果瀏覽器未安裝在默認(rèn)位置,會(huì)報(bào)cannot find Chrome binary錯(cuò)誤,需要配置環(huán)境變量及代碼指定瀏覽器位置

吐血了,閃退原因谷歌和谷歌驅(qū)動(dòng)版本不兼容

閃退換成3.31版本就好:pip install selenium3.3.1


# (1)導(dǎo)入selenium
from selenium import webdriver

# (2) 創(chuàng)建瀏覽器操作對(duì)象
path = 'chromedriver.exe'

browser = webdriver.Chrome(path)

# (3)訪問(wèn)網(wǎng)站
# url = 'https://www.baidu.com'
#
# browser.get(url)

url = 'https://www.jd.com/'

browser.get(url)

# page_source獲取網(wǎng)頁(yè)源碼
content = browser.page_source
print(content)

報(bào)錯(cuò):感覺(jué)是版本問(wèn)題 要不把chrome最新版卸了重新安裝?


raceback (most recent call last):
  File "D:\Python\爬蟲(chóng)\代碼\078_尚硅谷_爬蟲(chóng)_selenium_基本使用.py", line 9, in <module>
    browser = webdriver.Chrome(path).input()
  File "D:\Python\Python3.10.4\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 49, in __init__
    super().__init__(
  File "D:\Python\Python3.10.4\lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 60, in __init__
    ignore_proxy=self.options._ignore_local_proxy,
AttributeError: 'str' object has no attribute '_ignore_local_proxy'

重裝了還是用不了;我估計(jì)是方法過(guò)時(shí)了;

Google Chrome 64bit Windows版_chrome瀏覽器,chrome插件,谷歌瀏覽器下載,談笑有鴻儒


from selenium import webdriver
driver = webdriver.Chrome()

driver.get("https://www.jd.com/")
content = driver.page_source
print(content)

新方法 爬取成功!

Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath
4‐1:selenium的元素定位?

元素定位:自動(dòng)化要做的就是模擬鼠標(biāo)和鍵盤(pán)來(lái)操作來(lái)操作這些元素,點(diǎn)擊、輸入等等。操作這些元素前首先

要找到它們,WebDriver提供很多定位元素的方法

方法:(這些方法應(yīng)該都過(guò)時(shí)了)

參考最新源碼:


 def find_elements(self, by=By.ID, value: Optional[str] = None) -> List[WebElement]:
        """Find elements given a By strategy and locator.

        :Usage:
            ::

                elements = driver.find_elements(By.CLASS_NAME, 'foo')

        :rtype: list of WebElement
        """
        if isinstance(by, RelativeBy):
            _pkg = ".".join(__name__.split(".")[:-1])
            raw_function = pkgutil.get_data(_pkg, "findElements.js").decode("utf8")
            find_element_js = f"/* findElements */return ({raw_function}).apply(null, arguments);"
            return self.execute_script(find_element_js, by.to_dict())

        if by == By.ID:
            by = By.CSS_SELECTOR
            value = f'[id="{value}"]'
        elif by == By.CLASS_NAME:
            by = By.CSS_SELECTOR
            value = f".{value}"
        elif by == By.NAME:
            by = By.CSS_SELECTOR
            value = f'[name="{value}"]'

        # Return empty list if driver returns null
        # See https://github.com/SeleniumHQ/selenium/issues/4555
        return self.execute(Command.FIND_ELEMENTS, {"using": by, "value": value})["value"] or []

class By:
    """Set of supported locator strategies."""

    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector"

1.find_element_by_id

eg:button = browser.find_element_by_id('su')

Traceback (most recent call last):
File "D:\Python\爬蟲(chóng)\代碼\079_尚硅谷_爬蟲(chóng)_selenium_元素定位.py", line 14, in <module>
button = driver.find_element_by_id('su')
AttributeError: 'WebDriver' object has no attribute 'find_element_by_id'

button = browser.find_element('id','su') 改成這樣;

然后才能輸入browser.find_element(By.ID,'su');然后才能輸入browser.find_element(By.ID,'su')

2.find_elements_by_name

eg:name = browser.find_element_by_name('wd')

3.find_elements_by_xpath

eg:xpath1 = browser.find_elements_by_xpath('//input[@id="su"]')

4.find_elements_by_tag_name

eg:names = browser.find_elements_by_tag_name('input')

5.find_elements_by_css_selector

eg:my_input = browser.find_elements_by_css_selector('#kw')[0]

6.find_elements_by_link_text

eg:browser.find_element_by_link_text("新聞")


from selenium import webdriver

# path = 'chromedriver.exe'
# browser = webdriver.Chrome(path)
driver = webdriver.Chrome()
url = 'https://www.baidu.com'
driver.get(url)

# 元素定位

# 根據(jù)id來(lái)找到對(duì)象

# button = driver.find_element('id','su')
# print(button)
# <selenium.webdriver.remote.webelement.WebElement (session="4a3108f55869fdd968308cca8c755ceb", element="9c0cb14b-6b13-4df0-bd9c-f037b5e698b7")>

# 根據(jù)標(biāo)簽屬性的屬性值來(lái)獲取對(duì)象的
# button = driver.find_element('name','wd')
# print(button)
#<selenium.webdriver.remote.webelement.WebElement (session="9ce8bcbd316bd3833196d27b35bc3ee0", element="5b60bd16-8ddd-4d1e-91b5-419ca56df7c1")>

# 根據(jù)xpath語(yǔ)句來(lái)獲取對(duì)象
# button = driver.find_elements_by_xpath('//input[@id="su"]')
# AttributeError: 'WebDriver' object has no attribute 'find_elements_by_xpath'
# buttons = driver.find_elements('xpath','//input[@id="su"]')
# button = driver.find_element('xpath','//input[@id="su"]')
# print(buttons)
# # [<selenium.webdriver.remote.webelement.WebElement (session="88c5e8b10c200d2d01c6b60c1b4a10d0", element="737a0208-c72f-4413-a910-d637af304c07")>]
# print(button)
# <selenium.webdriver.remote.webelement.WebElement (session="460bc537d3c06f4863f0500bf8bd8778", element="05e6b8ac-7028-47de-92bf-740c8ebb4e3a")>

# 根據(jù)標(biāo)簽的名字來(lái)獲取對(duì)象
# button = driver.find_elements(by='tag name',value='input')
# print(button)
# [<selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="dd075d84-cec1-4f9a-b917-74658dc7d0ce")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="818e0cbb-29a1-4110-a149-8dce242bd835")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="47557002-f224-4331-a611-188db0de0ac5")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="7829b3a3-8b16-4d23-9561-65f3c935dec6")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="c052ffcf-a485-480d-aa46-31d98a8836a9")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="a59d68d0-cb5a-4770-9ea6-05a0720974b5")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="9c1bc881-d835-43ad-a859-4a9eed5f2d7b")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="409da760-913d-4e26-bcd2-0d984cc920fe")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="eade7f40-2207-44ed-8dfe-e6fa5c45a32e")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="b1fb9f45-56e4-4a77-bfab-e8c34daaf7ae")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="3bcb8f3f-c5b6-4546-a7c6-f577981dd975")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="d5c92328-43d7-4d85-9f24-d112d4a60535")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="0eec8b4f-e999-47e0-b2eb-8d3fac1f9e21")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="e8680897-274c-4485-86be-8795e826d5ca")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="4b16bf17-7915-4203-a558-b6dad4695d64")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="c2ceb712-e117-4323-bfe2-f0f63c753387")>, <selenium.webdriver.remote.webelement.WebElement (session="7ee88b514bbfd8dc09fee89186847dab", element="0905fc95-4a89-46c2-bd55-fa120174693f")>]

# 使用的bs4的語(yǔ)法來(lái)獲取對(duì)象
# button = driver.find_elements(by='css selector',value='#su')
# print(button)
# [<selenium.webdriver.remote.webelement.WebElement (session="8d7e7230bc7c180aaf19d0ffe6f14444", element="bea4de33-57ab-4578-b8f7-98a6fa68b734")>]

#獲取當(dāng)前頁(yè)面的鏈接文本
button = driver.find_element(by='link text',value='地圖')
print(button)
# <selenium.webdriver.remote.webelement.WebElement (session="3fd11e699abe32acaaebc12b2d76a812", element="7c7f54b2-dd76-4076-a582-c3f0a8352ca3")>
4‐2:訪問(wèn)元素信息

獲取元素屬性

.get_attribute('class')

獲取元素文本

.text

獲取標(biāo)簽名

.tag_name


from selenium import webdriver

driver = webdriver.Chrome()
url = 'https://www.baidu.com'
driver.get(url)

input = driver.find_element('id','su')

# 獲取標(biāo)簽的屬性
print(input.get_attribute('class'))
# bg s_btn
# 獲取標(biāo)簽的名字
print(input.tag_name)
# input

# 獲取元素文本
a = driver.find_element('link text','地圖')
print(a.text)
# 地圖
4‐3:交互

點(diǎn)擊:click()

輸入:send_keys()

后退操作:browser.back()

前進(jìn)操作:browser.forword()

模擬JS滾動(dòng):

js='document.documentElement.scrollTop=100000'

browser.execute_script(js) 執(zhí)行js代碼

獲取網(wǎng)頁(yè)代碼:page_source

退出:browser.quit()


from selenium import webdriver

# 創(chuàng)建瀏覽器對(duì)象
# path = 'chromedriver.exe'
# browser = webdriver.Chrome(path)
driver = webdriver.Chrome()
url = 'https://www.baidu.com'
driver.get(url)

import time
time.sleep(2)#睡2秒

# 獲取文本框的對(duì)象
input = driver.find_element('id','kw')

# 在文本框中輸入周杰倫
input.send_keys('周杰倫')
time.sleep(2)

# 獲取百度一下的按鈕
button = driver.find_element('id','su')

# 點(diǎn)擊按鈕
button.click()
time.sleep(2)

# 滑到底部  scrollTop=100000距離頂部十萬(wàn)差不多就能到底
js_bottom = 'document.documentElement.scrollTop=100000'
driver.execute_script(js_bottom)

time.sleep(2)

# 獲取下一頁(yè)的按鈕
next = driver.find_element('xpath','//a[@class="n"]')

# 點(diǎn)擊下一頁(yè)
next.click()
time.sleep(2)

# 回到上一頁(yè)
driver.back()
time.sleep(2)

# 回去
driver.forward()
time.sleep(3)

# 退出
driver.quit()

2.Phantomjs(公司破產(chǎn),基本淘汰)

1.什么是Phantomjs?

(1)是一個(gè)無(wú)界面的瀏覽器

(2)支持頁(yè)面元素查找,js的執(zhí)行

(3)由于不進(jìn)行css和gui渲染,運(yùn)行效率要比真實(shí)的瀏覽器要快很多

2.如何使用Phantomjs?

(1)獲取PhantomJS.exe文件路徑path

(2)browser = webdriver.PhantomJS(path)

(3)browser.get(url)

擴(kuò)展:保存屏幕快照:browser.save_screenshot('baidu.png')

3.Chrome handless

Chrome-headless 模式, Google 針對(duì) Chrome 瀏覽器 59版 新增加的一種模式,可以讓你不打開(kāi)UI界面的情況下使用 Chrome 瀏覽器,所以運(yùn)行效果與 Chrome 保持完美一致。

1.系統(tǒng)要求:

Chrome

Unix\Linux 系統(tǒng)需要 chrome >= 59

Windows 系統(tǒng)需要 chrome >= 60

Python3.6

Selenium==3.4.*

ChromeDriver==2.31

2.配置:

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

chrome_options = Options()

chrome_options.add_argument('‐‐headless')

chrome_options.add_argument('‐‐disable‐gpu')

path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'

chrome_options.binary_location = path

browser = webdriver.Chrome(chrome_options=chrome_options)

browser.get('http://www.baidu.com/')

3.配置封裝:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

# path是你自己的chrome瀏覽器的文件路徑
path = r'C:\Users\6\AppData\Local\Google\Chrome\Application\chrome.exe'
chrome_options.binary_location = path

driver = webdriver.Chrome()
url = 'https://www.baidu.com'
driver.get(url)

driver.save_screenshot('baidu.png')

我的還是會(huì)彈出來(lái)界面,我估計(jì)是driver的原因;


from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def share_browser():
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')

    # path是你自己的chrome瀏覽器的文件路徑
    path = r'C:\Users\王睿\AppData\Local\Google\Chrome\Application\chrome.exe'
    chrome_options.binary_location = path
    driver = webdriver.Chrome()

    return driver

driver = share_browser()

url = 'https://www.baidu.com'
driver.get(url)

作業(yè):京東文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-498259.html

到了這里,關(guān)于Python爬蟲(chóng) 從小白到高手 各種最新案例! Urllib Xpath的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ECharts案例大全(最新版),含各種案例,實(shí)例。

    ECharts案例大全(最新版),含各種案例,實(shí)例。

    友情鏈接:本文的擴(kuò)展延伸版,已更新發(fā)布至 ECharts全網(wǎng)案例最全版(含細(xì)節(jié)),可移步查閱。 前言:2022年2月以前,ECharts官網(wǎng)除了提供官方案例外,還額外提供了一個(gè)ECharts案例資源豐富的強(qiáng)大社區(qū)Make?A Pie來(lái)展示各類(lèi)的ECharts案例。這對(duì)于廣大開(kāi)發(fā)者,特別是前端頁(yè)面仔們來(lái)

    2024年02月11日
    瀏覽(14)
  • Python爬蟲(chóng)庫(kù)之urllib使用詳解

    Python爬蟲(chóng)庫(kù)之urllib使用詳解

    ? 一、Python urllib庫(kù) Python urllib 庫(kù)用于操作網(wǎng)頁(yè) URL,并對(duì)網(wǎng)頁(yè)的內(nèi)容進(jìn)行抓取處理。 Python3 的 urllib。 urllib 包 包含以下幾個(gè)模塊: urllib.request - 打開(kāi)和讀取 URL。 urllib.error - 包含 urllib.request 拋出的異常。 urllib.parse - 解析 URL。 urllib.robotparser - 解析 robots.txt 文件。 二、urllib.r

    2024年02月11日
    瀏覽(29)
  • Python 爬蟲(chóng)之 urllib 包基本使用

    urllib 是一個(gè) python 內(nèi)置包,不需要額外安裝即可使用,包里面包含了以下幾個(gè)用來(lái)處理 url 的模塊: urllib.request,用來(lái)打開(kāi)和讀取 url,意思就是可以用它來(lái)模擬發(fā)送請(qǐng)求,就像在瀏覽器里輸入網(wǎng)址然后敲擊回車(chē)一樣,獲取網(wǎng)頁(yè)響應(yīng)內(nèi)容。 urllib.error,用來(lái)處理 urllib.request 引起

    2024年02月09日
    瀏覽(21)
  • 【Python爬蟲(chóng)】Python爬蟲(chóng)三大基礎(chǔ)模塊(urllib & BS4 & Selenium)

    【Python爬蟲(chóng)】Python爬蟲(chóng)三大基礎(chǔ)模塊(urllib & BS4 & Selenium)

    參考資料 Python爬蟲(chóng)教程(從入門(mén)到精通) Python urllib | 菜鳥(niǎo)教程 Beautiful Soup 4 入門(mén)手冊(cè)_w3cschool Selenium入門(mén)指南 Selenium教程 什么是 Scrapy|極客教程 Scrapy入門(mén)教程 1、網(wǎng)絡(luò)爬蟲(chóng)是什么? 我們所熟悉的一系列 搜索引擎都是大型的網(wǎng)絡(luò)爬蟲(chóng) ,比如百度、搜狗、360瀏覽器、谷歌搜索等

    2024年02月12日
    瀏覽(21)
  • Python爬蟲(chóng)基礎(chǔ)(一):urllib庫(kù)的使用詳解

    Python爬蟲(chóng)基礎(chǔ)(一):urllib庫(kù)的使用詳解

    Python爬蟲(chóng)基礎(chǔ)(一):urllib庫(kù)的使用詳解 Python爬蟲(chóng)基礎(chǔ)(二):使用xpath與jsonpath解析爬取的數(shù)據(jù) Python爬蟲(chóng)基礎(chǔ)(三):使用Selenium動(dòng)態(tài)加載網(wǎng)頁(yè) Python爬蟲(chóng)基礎(chǔ)(四):使用更方便的requests庫(kù) Python爬蟲(chóng)基礎(chǔ)(五):使用scrapy框架 urllib是一個(gè)python自帶的庫(kù),不需要手動(dòng)安裝。

    2024年02月08日
    瀏覽(21)
  • Python從小白到高手實(shí)現(xiàn)系列一百七十三:達(dá)式Python 標(biāo)準(zhǔn)測(cè)試工具

    Ran 2 tests in 0.001s OK 如果使用上述命令,則不需要手動(dòng)定義__main__部分并調(diào)用unittest.main()函數(shù)。

    2024年04月12日
    瀏覽(23)
  • python爬蟲(chóng)-------urllib代理和代理池(第十七天)

    python爬蟲(chóng)-------urllib代理和代理池(第十七天)

    ????作者主頁(yè): 喔的嘛呀???? ????所屬專欄:python爬蟲(chóng)學(xué)習(xí)???? ??謝謝大家捧場(chǎng),祝屏幕前的小伙伴們每天都有好運(yùn)相伴左右,一定要天天開(kāi)心哦!??? 嗨嗨嗨,兄弟姐妹們。我是喔的嘛呀。今天的學(xué)習(xí)內(nèi)容是:爬蟲(chóng) urllib代理和代理池 目錄 一、爬蟲(chóng) urllib——代理

    2024年04月14日
    瀏覽(25)
  • Python爬蟲(chóng)技術(shù)系列-01請(qǐng)求響應(yīng)獲取-urllib庫(kù)

    Python爬蟲(chóng)技術(shù)系列-01請(qǐng)求響應(yīng)獲取-urllib庫(kù)

    參考連接: https://zhuanlan.zhihu.com/p/412408291 1.1.1 urllib簡(jiǎn)介 Urllib是python內(nèi)置的一個(gè)http請(qǐng)求庫(kù),不需要額外的安裝。只需要關(guān)注請(qǐng)求的鏈接,參數(shù),提供了強(qiáng)大的解析功能 Urllib庫(kù)有四個(gè)模塊:request,error, parse, robotparser request:發(fā)起請(qǐng)求(重要) error:處理錯(cuò)誤 parse:解析RUL或

    2024年02月07日
    瀏覽(52)
  • 看完這28個(gè)python爬蟲(chóng)項(xiàng)目,你離爬蟲(chóng)高手就不遠(yuǎn)了,不夠來(lái)找我

    看完這28個(gè)python爬蟲(chóng)項(xiàng)目,你離爬蟲(chóng)高手就不遠(yuǎn)了,不夠來(lái)找我

    ] 互聯(lián)網(wǎng)的數(shù)據(jù)爆炸式的增長(zhǎng),而利用 Python 爬蟲(chóng)我們可以獲取大量有價(jià)值的數(shù)據(jù): 1.爬取數(shù)據(jù),進(jìn)行市場(chǎng)調(diào)研和商業(yè)分析 爬取知乎優(yōu)質(zhì)答案,篩選各話題下最優(yōu)質(zhì)的內(nèi)容; 抓取房產(chǎn)網(wǎng)站買(mǎi)賣(mài)信息,分析房?jī)r(jià)變化趨勢(shì)、做不同區(qū)域的房?jī)r(jià)分析;爬取招聘網(wǎng)站職位信息,分析各

    2024年01月20日
    瀏覽(21)
  • 【Python爬蟲(chóng)開(kāi)發(fā)實(shí)戰(zhàn)①】使用urllib以及XPath爬取可愛(ài)小貓圖片

    【Python爬蟲(chóng)開(kāi)發(fā)實(shí)戰(zhàn)①】使用urllib以及XPath爬取可愛(ài)小貓圖片

    個(gè)人主頁(yè) :為夢(mèng)而生~ 關(guān)注我一起學(xué)習(xí)吧! 專欄 :python網(wǎng)絡(luò)爬蟲(chóng)從基礎(chǔ)到實(shí)戰(zhàn) 歡迎訂閱!后面的內(nèi)容會(huì)越來(lái)越有意思~ 往期推薦 : 【Python爬蟲(chóng)開(kāi)發(fā)基礎(chǔ)⑦】urllib庫(kù)的基本使用 【Python爬蟲(chóng)開(kāi)發(fā)基礎(chǔ)⑧】XPath庫(kù)及其基本用法 我們?cè)谥耙呀?jīng)有8篇文章講述基礎(chǔ)知識(shí)了,下面我們

    2024年02月11日
    瀏覽(168)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包