欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python urllib爬蟲(chóng)模塊使用解析

 更新時(shí)間:2019年09月05日 09:23:22   作者:凌逆戰(zhàn)  
這篇文章主要介紹了python urllib爬蟲(chóng)模塊使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

網(wǎng)絡(luò)爬蟲(chóng)也稱(chēng)為網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)機(jī)器人,抓取網(wǎng)絡(luò)的數(shù)據(jù)。其實(shí)就是用Python程序模仿人點(diǎn)擊瀏覽器并訪(fǎng)問(wèn)網(wǎng)站,而且模仿的越逼真越好。一般爬取數(shù)據(jù)的目的主要是用來(lái)做數(shù)據(jù)分析,或者公司項(xiàng)目做數(shù)據(jù)測(cè)試,公司業(yè)務(wù)所需數(shù)據(jù)。

而數(shù)據(jù)來(lái)源可以來(lái)自于公司內(nèi)部數(shù)據(jù),第三方平臺(tái)購(gòu)買(mǎi)的數(shù)據(jù),還可以通過(guò)網(wǎng)絡(luò)爬蟲(chóng)爬取數(shù)據(jù)。python在網(wǎng)絡(luò)爬蟲(chóng)方向上有著成熟的請(qǐng)求、解析模塊,以及強(qiáng)大的Scrapy網(wǎng)絡(luò)爬蟲(chóng)框架。

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

1、通用網(wǎng)絡(luò)爬蟲(chóng):搜索引擎使用,遵守robots協(xié)議(君子協(xié)議)

robots協(xié)議 :網(wǎng)站通過(guò)robots協(xié)議告訴搜索引擎哪些頁(yè)面可以抓取,哪些頁(yè)面不能抓取。https://www.taobao.com/robots.txt

2、聚焦網(wǎng)絡(luò)爬蟲(chóng) :自己寫(xiě)的爬蟲(chóng)程序

爬蟲(chóng)爬取數(shù)據(jù)步驟

  • 確定需要爬取的URL地址
  • 由請(qǐng)求模塊向URL地址發(fā)出請(qǐng)求,并得到網(wǎng)站的響應(yīng)
  • 從響應(yīng)內(nèi)容中提取所需數(shù)據(jù)
    • 所需數(shù)據(jù),保存
    • 頁(yè)面中有其他需要繼續(xù)跟進(jìn)的URL地址,繼續(xù)第2步去發(fā)請(qǐng)求,如此循環(huán)

請(qǐng)求模塊

from urllib import request

request.urlopen()  向網(wǎng)站發(fā)起請(qǐng)求并獲取響應(yīng)對(duì)象

參數(shù):

URL:需要爬取的URL地址

timeout: 設(shè)置等待超時(shí)時(shí)間,指定時(shí)間內(nèi)未得到響應(yīng)拋出超時(shí)異常

響應(yīng)對(duì)象(response)方法

  • string = response.read().decode('utf-8') 獲取響應(yīng)對(duì)象內(nèi)容(網(wǎng)頁(yè)源代碼),返回內(nèi)容為字節(jié)串bytes類(lèi)型,順便需要decode轉(zhuǎn)換成string。
  • url = response.geturl() 返回實(shí)際數(shù)據(jù)的URL地址
  • code = response.getcode() 返回HTTP響應(yīng)碼
from urllib import request
url = 'http://www.baidu.com/'

# 向百度發(fā)請(qǐng)求,得到響應(yīng)對(duì)象
response = request.urlopen(url)

# 返回網(wǎng)頁(yè)源代碼
print(response.read().decode('utf-8'))

# 返回http響應(yīng)碼
print(response.getcode())    # 200
# 返回實(shí)際數(shù)據(jù)URL地址
print(response.geturl())    # http://www.baidu.com/

urllib.request.Request()  創(chuàng)建請(qǐng)求對(duì)象(包裝請(qǐng)求,重構(gòu)User-Agent,使程序更像正常人類(lèi)請(qǐng)求)

參數(shù)

URL:請(qǐng)求的URL地址

headers:添加請(qǐng)求頭(爬蟲(chóng)和反爬蟲(chóng)斗爭(zhēng)的第一步)

使用流程

1、創(chuàng)建請(qǐng)求對(duì)象(重構(gòu)User-Agent)

req = urllib.request.Request(url=url,headers={'User-Agent':'Mozilla/5.0 xxxx'})

2、請(qǐng)求對(duì)象發(fā)起請(qǐng)求,獲取響應(yīng)對(duì)象(urlopen)

res = urllib.request.urlopen(req)

3、通過(guò)相應(yīng)對(duì)象獲取響應(yīng)內(nèi)容

html = res.read().decode('utf-8')

from urllib import request
url = 'http://httpbin.org/get'
headers = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)'}
# 創(chuàng)建請(qǐng)求對(duì)象(包裝請(qǐng)求)
req = request.Request(url=url,headers=headers)
# 發(fā)請(qǐng)求,獲取響應(yīng)對(duì)象
res = request.urlopen(req)
# 讀取內(nèi)容,返回網(wǎng)頁(yè)代碼
html = res.read().decode('utf-8')
print(html)

URL地址編碼

urllib.parse.urlencode({dict})

URL地址中一個(gè)查詢(xún)參數(shù)

查詢(xún)參數(shù):{'wd' : '美女'}

urlencode編碼后:'wd=%e7%be%8e%e5%a5%b3'

from urllib import parse
url = 'http://www.baidu.com/s?'
query_string = parse.urlencode({'wd':'美女'})
print(query_string)     # wd=%E7%BE%8E%E5%A5%B3
url = url + query_string
# http://www.baidu.com/wd=%E7%BE%8E%E5%A5%B3

URL地址中多個(gè)查詢(xún)參數(shù)

from urllib import parse
query_string_dict = {'wd' : '美女',
          'pn' : '50'}
query_string = parse.urlencode(query_string_dict)
url = 'http://www.baidu.com/s?{}'.format(query_string)
print(url)
# http://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3&pn=50

拼接URL地址的3種方式

1、字符串相加

'https://www.baidu.com/s?' + urlencode({'wd':'美女','pn':'50'})

2、字符串格式化(占位符)

'https://www.baidu.com/s?%s' % urlencode({'wd':'美女','pn':'50'})

3、format()方法

'https://www.baidu.com/s?{}'.format(urlencode({'wd':'美女','pn':'50'}))

示例 在百度中輸入要搜索的內(nèi)容,把響應(yīng)內(nèi)容保存到本地文件

from urllib import request
from urllib import parse

# 定義常用變量
word = input('請(qǐng)輸入搜索內(nèi)容:')
url = 'http://www.baidu.com/s?'
headers = {'User-Agent':'Mozilla/5.0'}

# url編碼,拼接完整URL
query_string = parse.urlencode({'wd':word})
url = url + query_string

# 三步走
req = request.Request(url=url,headers=headers)
res = request.urlopen(req)
html = res.read().decode('utf-8')

filename = '{}.html'.format(word)
with open(filename,'w',encoding='utf-8') as f:
  f.write(html)

urllib.parse.quote(string)編碼

from urllib import parse
parse.quote('美女')    # %E7%BE%8E%E5%A5%B3

urllib.parse.unquote(string)解碼

from urllib import parse
result = parse.unquote('%E7%BE%8E%E5%A5%B3')
print(result)    # 美女

百度貼吧網(wǎng)頁(yè)獲取

  • 輸入貼吧名稱(chēng)
  • 輸入起始頁(yè)
  • 輸入終止頁(yè)
  • 保存到本地文件:第1頁(yè).html、第2頁(yè).html ...

實(shí)現(xiàn)步驟

1、找URL規(guī)律

1、不同吧

2、不同頁(yè)

第1頁(yè):http://tieba.baidu.com/f?kw=????&pn=0

第2頁(yè):http://tieba.baidu.com/f?kw=????&pn=50

第n頁(yè):pn=(n-1)*50

2、獲取網(wǎng)頁(yè)內(nèi)容

3、保存(本地文件、數(shù)據(jù)庫(kù))

from urllib import request,parse
import time
import random

class BaiduSpider(object):
  def __init__(self):
    self.url = 'http://tieba.baidu.com/f?kw={}&pn={}'
    self.headers = {'User-Agent':'Mozilla/5.0'}

  # 獲取響應(yīng)
  def get_page(self,url):
    req = request.Request(url=url,headers=self.headers)
    res = request.urlopen(req)
    html = res.read().decode('utf-8')
    return html

  # 保存數(shù)據(jù)
  def write_page(self,filename,html):
    with open(filename,'w') as f:
      f.write(html)

  # 主函數(shù)
  def main(self):
    name = input('請(qǐng)輸入貼吧名:')
    start = int(input('請(qǐng)輸入起始頁(yè):'))
    end = int(input('請(qǐng)輸入終止頁(yè):'))

    # 拼接URL地址,發(fā)請(qǐng)求
    for page in range(start,end+1):
      pn = (page-1)*50
      kw = parse.quote(name)     # url編碼
      url = self.url.format(kw,pn)
      html = self.get_page(url)    # 獲取響應(yīng),并保存
      filename = '{}-第{}頁(yè).html'.format(name,page)
      self.write_page(filename,html)
      print('第{}頁(yè)爬取成功'.format(page)) # 提示進(jìn)度
      time.sleep(random.randint(1,3))   # 控制爬取速度

if __name__ == '__main__':
  spider = BaiduSpider()
  spider.main()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 對(duì)python中使用requests模塊參數(shù)編碼的不同處理方法

    對(duì)python中使用requests模塊參數(shù)編碼的不同處理方法

    今天小編就為大家分享一篇對(duì)python中使用requests模塊參數(shù)編碼的不同處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python的scrapy框架之Pipeline文件的用法詳解

    python的scrapy框架之Pipeline文件的用法詳解

    這篇文章主要介紹了python的scrapy框架之Pipeline文件的用法詳解,Pipeline是一個(gè)獨(dú)立的模塊,用于處理從Spider中提取的Item對(duì)象,實(shí)現(xiàn)對(duì)數(shù)據(jù)的進(jìn)一步處理、存儲(chǔ)和清洗等操作,下面將詳細(xì)介紹Scrapy框架中Pipeline的用法,需要的朋友可以參考下
    2023-10-10
  • django中F與Q查詢(xún)的使用

    django中F與Q查詢(xún)的使用

    一般查詢(xún)都是單條件查詢(xún),F(xiàn)和Q是組合條件查詢(xún),本文主要介紹了django中F與Q查詢(xún)的使用,感興趣的可以了解一下
    2021-06-06
  • Python中實(shí)現(xiàn)傳遞未知數(shù)量的函數(shù)參數(shù)

    Python中實(shí)現(xiàn)傳遞未知數(shù)量的函數(shù)參數(shù)

    這篇文章主要介紹了Python中實(shí)現(xiàn)傳遞未知數(shù)量的函數(shù)參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python之Trimesh庫(kù)的使用方式

    Python之Trimesh庫(kù)的使用方式

    這篇文章主要介紹了Python之Trimesh庫(kù)的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python 用下標(biāo)截取字符串的實(shí)例

    python 用下標(biāo)截取字符串的實(shí)例

    今天小編就為大家分享一篇python 用下標(biāo)截取字符串的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python itertools模塊詳解

    Python itertools模塊詳解

    這篇文章主要介紹了Python itertools模塊詳解,本文基本是基于文檔的翻譯和補(bǔ)充,相當(dāng)于翻譯了,需要的朋友可以參考下
    2015-05-05
  • Python 合并多個(gè)TXT文件并統(tǒng)計(jì)詞頻的實(shí)現(xiàn)

    Python 合并多個(gè)TXT文件并統(tǒng)計(jì)詞頻的實(shí)現(xiàn)

    這篇文章主要介紹了Python 合并多個(gè)TXT文件并統(tǒng)計(jì)詞頻的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python可視化大屏庫(kù)big_screen示例詳解

    python可視化大屏庫(kù)big_screen示例詳解

    提到數(shù)據(jù)可視化,我們會(huì)想到 Plotly、Matplotlib、Pyecharts等可視化庫(kù),或者一些商用軟件Tableau、FineBI等等。如果你希望操作更簡(jiǎn)單、展現(xiàn)效果更強(qiáng)大,那么這款工具 big_screen 更適合
    2021-11-11
  • 關(guān)于python pyqt5安裝失敗問(wèn)題的解決方法

    關(guān)于python pyqt5安裝失敗問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于python pyqt5安裝失敗問(wèn)題的解決方法,文中給出了詳細(xì)的解決過(guò)程與解決方法,對(duì)同樣遇到這個(gè)問(wèn)題的朋友們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08

最新評(píng)論