欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python之爬蟲(chóng)有感(一)

系統(tǒng) 2061 0

urllib.request.Request('URL',headers = headers)
User-Agent 是爬蟲(chóng)和反爬蟲(chóng)斗爭(zhēng)的第一步,發(fā)送請(qǐng)求必須帶User—Agent
使用流程:
??? 1、創(chuàng)建請(qǐng)求對(duì)象
??????? request = urlllib.request.Request('url'......)
??? 2、發(fā)送請(qǐng)求獲取響應(yīng)對(duì)象
??????? response = urllib.request.urlopen(request)
??? 3、獲取響應(yīng)內(nèi)容
??????? html = response.read().deconde('utf-8')

為什么要使用User—Agent呢?如果沒(méi)有這個(gè)就對(duì)網(wǎng)頁(yè)進(jìn)行爬取,當(dāng)爬取大量數(shù)據(jù)短時(shí)間大量訪問(wèn)網(wǎng)頁(yè)那邊就會(huì)知道你這邊是一個(gè)程序,就可以進(jìn)行屏蔽,使用User-Agent能夠讓那邊認(rèn)為你這邊的爬蟲(chóng)是一個(gè)瀏覽器對(duì)其進(jìn)行訪問(wèn),不會(huì)攔截,當(dāng)然如果就一個(gè)User-Agent短時(shí)間訪問(wèn)多次也是會(huì)被攔截,此時(shí)解決問(wèn)題的方法是使用多個(gè)User-Agent,每次訪問(wèn)網(wǎng)頁(yè)都隨機(jī)選取一個(gè)User-Agent,這樣就可以解決該問(wèn)題。

簡(jiǎn)單的示例,使用上面的方法爬取百度首頁(yè)內(nèi)容:

            
              import
            
            
               urllib.request

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

headers 
            
            = {
            
              '
            
            
              User-Agent
            
            
              '
            
            : 
            
              '
            
            
              自己找一個(gè)Uer-Agent
            
            
              '
            
            
              }


            
            
              #
            
            
              1、創(chuàng)建請(qǐng)求對(duì)象
            
            
req = urllib.request.Request(url, headers=
            
              headers)


            
            
              #
            
            
              2、獲取響應(yīng)對(duì)象
            
            
res =
            
               urllib.request.urlopen(req)


            
            
              #
            
            
              3|響應(yīng)對(duì)象read().decode('utf-8')
            
            
html = res.read().decode(
            
              '
            
            
              utf-8
            
            
              '
            
            
              )

            
            
              print
            
            (html)
          

如果要爬取一些復(fù)雜的網(wǎng)頁(yè),就需要對(duì)網(wǎng)頁(yè)進(jìn)行分析。

比如說(shuō)對(duì)騰訊招聘進(jìn)行爬取,首先騰訊招聘網(wǎng)頁(yè)是一個(gè)動(dòng)態(tài)網(wǎng)頁(yè),簡(jiǎn)單方式爬取不了,那我們找到這個(gè)網(wǎng)頁(yè)的json網(wǎng)頁(yè)如下:

          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
          
網(wǎng)頁(yè)獲得的結(jié)果是這樣的:

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

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

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

          這樣看起來(lái)就舒服多了,而且都是字典格式以及列表,找到我們想要的數(shù)據(jù)就更加簡(jiǎn)單了。
        
        
          我們可以修改pageIndex這個(gè)錨點(diǎn)的值跳轉(zhuǎn)到不同頁(yè)面,對(duì)多個(gè)頁(yè)面進(jìn)行爬取。
          
話不多說(shuō),直接先上代碼:
            
              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
            
            
              '
            
            : 
            
              '
            
            
              自己找一個(gè)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[
            
            
              '
            
            
              最近公布時(shí)間
            
            
              '
            
            ] = result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            ][i][
            
              '
            
            
              LastUpdateTime
            
            
              '
            
            
              ]
        position[
            
            
              '
            
            
              工作地點(diǎn)
            
            
              '
            
            ]  = result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            ][i][
            
              '
            
            
              CountryName
            
            
              '
            
            ] + result[
            
              '
            
            
              Data
            
            
              '
            
            ][
            
              '
            
            
              Posts
            
            
              '
            
            ][0][
            
              '
            
            
              LocationName
            
            
              '
            
            
              ]
        position[
            
            
              '
            
            
              職位內(nèi)容
            
            
              '
            
            ] = 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)
          

我的思路大致是這樣的:

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

將所有的字典都保存到一個(gè)列表L里面,然后再將L內(nèi)數(shù)據(jù)寫(xiě)入到本地json文件中。對(duì)于多頁(yè)面找到了錨點(diǎn)pageIndex,就通過(guò)一些手段每次某一頁(yè)面爬取完就更改pageIndex爬取下一頁(yè)。本程序通過(guò)更改offset的值,原網(wǎng)頁(yè)應(yīng)該有203個(gè)頁(yè)面左右,我程序里面只爬取了兩個(gè)頁(yè)面,可以自行更改。

好了,如果使用了scrapy框架就會(huì)體會(huì)到python爬蟲(chóng)是多么的方便了。

          


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产成人综合欧美精品久久 | 亚洲精品v天堂中文字幕 | 免费在线观看黄 | 国产成人精品在线观看 | 亚洲日韩视频免费观看 | 麻豆高清免费国产一区 | 久草久热 | 不卡久久 | 午夜在线亚洲男人午在线 | 久久国产精品免费一区二区三区 | 九草在线视频 | 九九99热久久精品在线9 | 天天干夜夜噜 | 久久91精品国产91久久小草 | 耽美男男肉文 | www.久久久| 另类国产ts人妖高潮系列视频 | 日本久久精品视频 | 国内精品视频在线观看 | 黄色毛片视频网站 | 操人视频免费 | 黄色片视频观看 | 久久久久免费视频 | 国产精品人妻无码免费久久一 | 欧美日韩一区在线观看 | 欧美高清在线精品一区 | 欧美成人午夜在线全部免费 | 国产成人精品视频 | 中文字幕一区二区在线观看 | 国产一三区A片在线播放 | 一级片国语 | 午夜人成 | 黄色的视频免费观看 | 一级片九九 | 国产毛片片精品天天看视频 | 亚州AV无码乱码色情 | 黄色亚洲视频 | 国产亚洲精品久久久久久久网站 | 日韩精品久久一区二区三区 | 国产成人最新毛片基地 | 亚洲夜夜爽 |