亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python之爬蟲有感(一)

系統 2216 0

urllib.request.Request('URL',headers = headers)
User-Agent 是爬蟲和反爬蟲斗爭的第一步,發送請求必須帶User—Agent
使用流程:
??? 1、創建請求對象
??????? request = urlllib.request.Request('url'......)
??? 2、發送請求獲取響應對象
??????? response = urllib.request.urlopen(request)
??? 3、獲取響應內容
??????? html = response.read().deconde('utf-8')

為什么要使用User—Agent呢?如果沒有這個就對網頁進行爬取,當爬取大量數據短時間大量訪問網頁那邊就會知道你這邊是一個程序,就可以進行屏蔽,使用User-Agent能夠讓那邊認為你這邊的爬蟲是一個瀏覽器對其進行訪問,不會攔截,當然如果就一個User-Agent短時間訪問多次也是會被攔截,此時解決問題的方法是使用多個User-Agent,每次訪問網頁都隨機選取一個User-Agent,這樣就可以解決該問題。

簡單的示例,使用上面的方法爬取百度首頁內容:

            
              import
            
            
               urllib.request

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

headers 
            
            = {
            
              '
            
            
              User-Agent
            
            
              '
            
            : 
            
              '
            
            
              自己找一個Uer-Agent
            
            
              '
            
            
              }


            
            
              #
            
            
              1、創建請求對象
            
            
req = urllib.request.Request(url, headers=
            
              headers)


            
            
              #
            
            
              2、獲取響應對象
            
            
res =
            
               urllib.request.urlopen(req)


            
            
              #
            
            
              3|響應對象read().decode('utf-8')
            
            
html = res.read().decode(
            
              '
            
            
              utf-8
            
            
              '
            
            
              )

            
            
              print
            
            (html)
          

如果要爬取一些復雜的網頁,就需要對網頁進行分析。

比如說對騰訊招聘進行爬取,首先騰訊招聘網頁是一個動態網頁,簡單方式爬取不了,那我們找到這個網頁的json網頁如下:

          https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1563246818490&countryId=&cityId=&bgIds=&productId=&categoryId=40001001,40001002,40001003,40001004,40001005,40001006&parentCategoryId=&attrId=&keyword=&
          
            pageIndex=0
          
        
          &pageSize=10&language=zh-cn&area=cn
          
網頁獲得的結果是這樣的:

Python之爬蟲有感(一)_第1張圖片

          這樣看起來很難受,所以用一個插件JSON View(chrome瀏覽器),重新加載后格式為:
        

Python之爬蟲有感(一)_第2張圖片

          這樣看起來就舒服多了,而且都是字典格式以及列表,找到我們想要的數據就更加簡單了。
        
        
          我們可以修改pageIndex這個錨點的值跳轉到不同頁面,對多個頁面進行爬取。
          
話不多說,直接先上代碼:
            
              import
            
            
               urllib.request

            
            
              import
            
            
               json

beginURL 
            
            = 
            
              '
            
            
              https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1563246818490&countryId=&cityId=&bgIds=&productId=&categoryId=40001001,40001002,40001003,40001004,40001005,40001006&parentCategoryId=&attrId=&keyword=&pageIndex=
            
            
              '
            
            
              
offset 
            
            =
            
               0
endURL 
            
            = 
            
              '
            
            
              &pageSize=10&language=zh-cn&area=cn
            
            
              '
            
            
              
start_urls 
            
            = beginURL + str(offset) +
            
               endURL
headers 
            
            = {
            
              '
            
            
              User-Agent
            
            
              '
            
            : 
            
              '
            
            
              自己找一個User-Agent
            
            
              '
            
            
              }


            
            
              while
            
            
               True:
    
            
            
              if
            
             offset < 2
            
              :
        offset 
            
            += 1
    
            
              else
            
            
              :
        
            
            
              break
            
            
              

    html 
            
            = urllib.request.urlopen(start_urls, headers=
            
              headers)
    result 
            
            =
            
               json.loads(html.read())

    position 
            
            =
            
               {}
    L 
            
            =
            
               []
    
            
            
              for
            
             i 
            
              in
            
             range(len(result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            
              ])):
        position[
            
            
              '
            
            
              職位名稱
            
            
              '
            
            ] = result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            ][i][
            
              '
            
            
              RecruitPostName
            
            
              '
            
            
              ]
        position[
            
            
              '
            
            
              最近公布時間
            
            
              '
            
            ] = result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            ][i][
            
              '
            
            
              LastUpdateTime
            
            
              '
            
            
              ]
        position[
            
            
              '
            
            
              工作地點
            
            
              '
            
            ]  = result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            ][i][
            
              '
            
            
              CountryName
            
            
              '
            
            ] + result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            ][0][
            
              '
            
            
              LocationName
            
            
              '
            
            
              ]
        position[
            
            
              '
            
            
              職位內容
            
            
              '
            
            ] = result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            ][i][
            
              '
            
            
              Responsibility
            
            
              '
            
            
              ]
        position[
            
            
              '
            
            
              工作鏈接
            
            
              '
            
            ] = result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            ][i][
            
              '
            
            
              PostURL
            
            
              '
            
            
              ]
        L.append(position)

    
            
            
              print
            
            
              (L)
    with open(
            
            
              '
            
            
              TencentJobs.json
            
            
              '
            
            , 
            
              '
            
            
              a
            
            
              '
            
            , encoding=
            
              '
            
            
              utf-8
            
            
              '
            
            
              ) as fp:
        json.dump(L, fp, ensure_ascii
            
            =False)
          

我的思路大致是這樣的:

首先從一個網頁里面爬取到自己想要的數據,將第一個網頁加載出來, html = urllib.request.urlopen(start_urls, headers= headers)? result = json.loads(html.read()),將start-urls換成第一個網頁的url就可以了,通過程序將網頁得到的結果放在result里, 然后從第一個網頁進行分析,發現它里面的內容都是字典還有一個列表,那么通過字典和列表的索引方式找到我們想要的數據。例如,獲得職位名稱可以使用result[ ' Data '][ ' Posts '][i][ ' RecruitPostName ' ],再用一個一個position字典進行保存,后面依次類推。

將所有的字典都保存到一個列表L里面,然后再將L內數據寫入到本地json文件中。對于多頁面找到了錨點pageIndex,就通過一些手段每次某一頁面爬取完就更改pageIndex爬取下一頁。本程序通過更改offset的值,原網頁應該有203個頁面左右,我程序里面只爬取了兩個頁面,可以自行更改。

好了,如果使用了scrapy框架就會體會到python爬蟲是多么的方便了。

          


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 春色www视频在线观看 | 日本午夜在线视频 | 国产一级黄色毛片 | 欧美不卡精品中文字幕日韩 | a级高清观看视频在线看 | 国产18到20岁美女毛片 | 看免费5xxaaa毛片30厘米 | 精品久久久久久国产免费了 | 国产一区二区三区不卡免费观看 | 国产欧美在线观看精品一区二区 | 国产高h| 日本欧洲亚洲一区在线观看 | 国产精品区一区二区免费 | 欧美一区二区三区视频在线观看 | 久久免费激情视频 | 中国精品久久 | 九九伦理影院手机观看 | 国产精品视频不卡 | 国产日韩欧美在线观看不卡 | 最新日本一级中文字幕 | 欧美日韩亚洲一区 | 国产中文在线 | 亚洲欧洲精品成人久久曰 | 日本中文在线视频 | 9191在线精品播放 | 一区二区在线播放福利视频 | 久久亚洲视频 | 午夜色网站 | 免费国产一区 | 欧美一级毛片香蕉网 | 99成人精品| 亚洲欧美日韩一区 | 欧美亚洲大片 | 精品久久伦理中文字幕 | 成人国产免费 | 四虎影院免费看 | 精品一精品国产一级毛片 | 欧美亚洲日本国产综合网 | 久久成人精品免费播放 | 日韩欧美亚洲国产 | 国产视频在线观看福利 |