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

Python用requests模塊實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)爬蟲(chóng)

 更新時(shí)間:2022年02月11日 11:32:28   作者:Python程序員小泉  
大家好,本篇文章主要講的是Python用requests模塊實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)爬蟲(chóng),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下

前言

Python爬蟲(chóng)實(shí)戰(zhàn),requests模塊,Python實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)爬蟲(chóng)

讓我們愉快地開(kāi)始吧~

開(kāi)發(fā)工具

Python版本: 3.6.4

相關(guān)模塊:

urllib模塊;

random模塊;

requests模塊;

traceback模塊;

以及一些Python自帶的模塊。

環(huán)境搭建

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

那我們就開(kāi)啟爬蟲(chóng)的正確姿勢(shì)吧,先用解析接口的方法來(lái)寫(xiě)爬蟲(chóng)。

首先,找到真實(shí)請(qǐng)求。右鍵檢查,點(diǎn)擊Network,選中XHR,刷新網(wǎng)頁(yè),選擇Name列表中的jsp文件。沒(méi)錯(cuò),就這么簡(jiǎn)單,真實(shí)請(qǐng)求就藏在里面。

1.gif

我們?cè)僮屑?xì)看看這個(gè)jsp,這簡(jiǎn)直是個(gè)寶啊。有真實(shí)請(qǐng)求url,有請(qǐng)求方法post,有Headers,還有Form Data,而From Data表示給url傳遞的參數(shù),通過(guò)改變參數(shù),咱們就可以獲得數(shù)據(jù)!為了安全,給自個(gè)Cookie打了個(gè)馬賽克

image.png

我們嘗試點(diǎn)擊翻頁(yè),發(fā)現(xiàn)只有pagesnum參數(shù)會(huì)變化。

3.png

1 from urllib.parse import urlencode
2 import csv
3 import random
4 import requests
5 import traceback
6 from time import sleep
7 from lxml import etree    #lxml為第三方網(wǎng)頁(yè)解析庫(kù),強(qiáng)大且速度快

1 base_url = 'http://www.hshfy.sh.cn/shfy/gweb2017/ktgg_search_content.jsp?'  #這里要換成對(duì)應(yīng)Ajax請(qǐng)求中的鏈接
2
3 headers = {
4    'Connection': 'keep-alive',
5    'Accept': '*/*',
6    'X-Requested-With': 'XMLHttpRequest',
7    'User-Agent': '你的User-Agent',
8    'Origin': 'http://www.hshfy.sh.cn',
9    'Referer': 'http://www.hshfy.sh.cn/shfy/gweb2017/ktgg_search.jsp?zd=splc',
10    'Accept-Language': 'zh-CN,zh;q=0.9',
11    'Content-Type': 'application/x-www-form-urlencoded',
12    'Cookie': '你的Cookie'
13 }

構(gòu)建get_page函數(shù),自變量為page,也就是頁(yè)數(shù)。以字典類(lèi)型創(chuàng)建表單data,用post方式去請(qǐng)求網(wǎng)頁(yè)數(shù)據(jù)。這里要注意要對(duì)返回的數(shù)據(jù)解碼,編碼為’gbk’,否則返回的數(shù)據(jù)會(huì)亂碼!

1def get_page(page):
2    n = 3
3    while True:
4        try:
5            sleep(random.uniform(1, 2))  # 隨機(jī)出現(xiàn)1-2之間的數(shù),包含小數(shù)
6            data = {
7                'yzm': 'yxAH',
8                'ft':'',
9                'ktrqks': '2020-05-22',
10                'ktrqjs': '2020-06-22',
11                'spc':'',
12                'yg':'',
13                'bg':'',
14                'ah':'',
15                'pagesnum': page
16            }
17            url = base_url + urlencode(data)
18            print(url)
19            try:
20                response = requests.request("POST",url, headers = headers)
21                #print(response)
22                if response.status_code == 200:
23                    re = response.content.decode('gbk')
24                    # print(re)
25                    return re  # 解析內(nèi)容
26            except requests.ConnectionError as e:
27                print('Error', e.args)  # 輸出異常信息
28        except (TimeoutError, Exception):
29            n -= 1
30            if n == 0:
31                print('請(qǐng)求3次均失敗,放棄此url請(qǐng)求,檢查請(qǐng)求條件')
32                return
33            else:
34                print('請(qǐng)求失敗,重新請(qǐng)求')
35                continue

構(gòu)建parse_page函數(shù),對(duì)返回的網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行解析,用Xpath提取所有字段內(nèi)容,保存為csv格式。

 1def parse_page(html):
2    try:
3        parse = etree.HTML(html)  # 解析網(wǎng)頁(yè)
4        items = parse.xpath('//*[@id="report"]/tbody/tr')
5        for item in items[1:]:
6            item = {
7                'a': ''.join(item.xpath('./td[1]/font/text()')).strip(),
8                'b': ''.join(item.xpath('./td[2]/font/text()')).strip(),
9                'c': ''.join(item.xpath('./td[3]/text()')).strip(),
10                'd': ''.join(item.xpath('./td[4]/text()')).strip(),
11                'e': ''.join(item.xpath('./td[5]/text()')).strip(),
12                'f': ''.join(item.xpath('./td[6]/div/text()')).strip(),
13                'g': ''.join(item.xpath('./td[7]/div/text()')).strip(),
14                'h': ''.join(item.xpath('./td[8]/text()')).strip(),
15                'i': ''.join(item.xpath('./td[9]/text()')).strip()
16            }
17            #print(item)
18            try:
19                with open('./law.csv', 'a', encoding='utf_8_sig', newline='') as fp:
20                    # 'a'為追加模式(添加)
21                    # utf_8_sig格式導(dǎo)出csv不亂碼
22                    fieldnames = ['a', 'b', 'c', 'd', 'e','f','g','h','i']
23                    writer = csv.DictWriter(fp,fieldnames)
24                    writer.writerow(item)
25            except Exception:
26                print(traceback.print_exc())  #代替print e 來(lái)輸出詳細(xì)的異常信息
27    except Exception:
28        print(traceback.print_exc())

遍歷一下頁(yè)數(shù),調(diào)用一下函數(shù)

1    for page in range(1,5):  #這里設(shè)置想要爬取的頁(yè)數(shù)
2        html = get_page(page)
3        #print(html)
4        print("第" + str(page) + "頁(yè)提取完成")

效果:

4.gif

總結(jié)

到此這篇關(guān)于Python用requests模塊實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)爬蟲(chóng)的文章就介紹到這了,更多相關(guān)Python requests內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解PyTorch預(yù)定義數(shù)據(jù)集類(lèi)datasets.ImageFolder使用方法

    詳解PyTorch預(yù)定義數(shù)據(jù)集類(lèi)datasets.ImageFolder使用方法

    這篇文章主要為大家介紹了PyTorch預(yù)定義數(shù)據(jù)集類(lèi)datasets.ImageFolder使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Python打包為exe詳細(xì)教程

    Python打包為exe詳細(xì)教程

    今天給大家介紹如何用Python打包exe,文中有非常詳細(xì)的教程,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Python百度指數(shù)獲取腳本下載并保存

    Python百度指數(shù)獲取腳本下載并保存

    這篇文章主要介紹了Python百度指數(shù)獲取腳本下載并保存,基于原有的可以對(duì)百度指數(shù)進(jìn)行爬蟲(chóng)的腳本做一個(gè)可直接返回pd.DataFrame的數(shù)據(jù)框的類(lèi)加上可視化代碼完成,需要的朋友可以參考一下
    2022-06-06
  • python matplotlib包圖像配色方案分享

    python matplotlib包圖像配色方案分享

    這篇文章主要介紹了python matplotlib包圖像配色方案分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 解決Pycharm調(diào)用Turtle時(shí) 窗口一閃而過(guò)的問(wèn)題

    解決Pycharm調(diào)用Turtle時(shí) 窗口一閃而過(guò)的問(wèn)題

    今天小編就為大家分享一篇解決Pycharm調(diào)用Turtle時(shí) 窗口一閃而過(guò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 詳解Django中CSRF和CORS的區(qū)別

    詳解Django中CSRF和CORS的區(qū)別

    本文主要介紹了詳解Django中CSRF和CORS的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • python多線程并發(fā)讓兩個(gè)LED同時(shí)亮的方法

    python多線程并發(fā)讓兩個(gè)LED同時(shí)亮的方法

    今天小編就為大家分享一篇python多線程并發(fā)讓兩個(gè)LED同時(shí)亮的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python基礎(chǔ)學(xué)習(xí)之函數(shù)和代碼復(fù)用詳解

    Python基礎(chǔ)學(xué)習(xí)之函數(shù)和代碼復(fù)用詳解

    函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)學(xué)習(xí)之函數(shù)和代碼復(fù)用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 跟老齊學(xué)Python之print詳解

    跟老齊學(xué)Python之print詳解

    print的一些基本用法,在前面的講述中也涉及一些,本講是在復(fù)習(xí)的基礎(chǔ)上,盡量再多點(diǎn)內(nèi)容。
    2014-09-09
  • Python對(duì)比校驗(yàn)神器deepdiff庫(kù)使用詳解

    Python對(duì)比校驗(yàn)神器deepdiff庫(kù)使用詳解

    deepdiff模塊常用來(lái)校驗(yàn)兩個(gè)對(duì)象是否一致,包含3個(gè)常用類(lèi),DeepDiff,DeepSearch和DeepHash,其中DeepDiff最常用,可以對(duì)字典,可迭代對(duì)象,字符串等進(jìn)行對(duì)比,使用遞歸地查找所有差異,本文給大家講解Python對(duì)比校驗(yàn)神器deepdiff庫(kù),感興趣的朋友一起看看吧
    2023-04-04

最新評(píng)論