整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Servlet總結十四:轉發與重定向

          、跳轉的方式

          轉發: forward

          重定向: redirect

          2、轉發和重定向代碼怎么完成

          1、轉發
          //請求轉發到/b對應的Servlet
          request.getRequestDispatcher("/b").forward(request,response);
          
          2、重定向
          response.sendRedirect(request.getContextPath() + "/b");

          3、轉發和重定向的區別?

          相同點:都可以完成資源的跳轉

          不同點:

          轉發是request對象觸發的,服務器內部進行轉發

          重定向是response對象觸發的,要將重定向的路徑相應給瀏覽器

          轉發是一次請求,瀏覽器地址欄上地址不變

          重定向是兩次請求,瀏覽器地址欄上的地址發生變化

          重定向路徑需要加項目名(webapp跟路徑web目錄)

          轉發是在本項目內部完成資源的跳轉

          重定向可以完成跨app跳轉,例如可以跳轉到https://www.baidu.com

          4、什么時候采用轉發,什么時候采用重定向

          1、大部分情況下都使用重定向

          2、若想完成跨app跳轉,必須采用重定向

          若在上一個資源中向request范圍中存儲了數據,希望在下一個資源中從request范圍中取出,必須使用轉發

          3、重定向可以解決瀏覽器的刷新問題

          5、重定向解決頁面刷新問題

          HTML 使用超級鏈接與網絡上的另一個文檔相連。幾乎可以在所有的網頁中找到鏈接。點擊鏈接可以從一張頁面跳轉到另一張頁面。

          HTML 鏈接

          如何在HTML文檔中創建鏈接。

          (可以在本頁底端找到更多實例)

          HTML 超鏈接(鏈接)

          HTML使用標簽 <a>來設置超文本鏈接。

          超鏈接可以是一個字,一個詞,或者一組詞,也可以是一幅圖像,您可以點擊這些內容來跳轉到新的文檔或者當前文檔中的某個部分。

          當您把鼠標指針移動到網頁中的某個鏈接上時,箭頭會變為一只小手。

          在標簽<a> 中使用了href屬性來描述鏈接的地址。

          默認情況下,鏈接將以以下形式出現在瀏覽器中:

          • 一個未訪問過的鏈接顯示為藍色字體并帶有下劃線。

          • 訪問過的鏈接顯示為紫色并帶有下劃線。

          • 點擊鏈接時,鏈接顯示為紅色并帶有下劃線。

          注意:如果為這些超鏈接設置了 CSS 樣式,展示樣式會根據 CSS 的設定而顯示。

          HTML 鏈接語法

          鏈接的 HTML 代碼很簡單。它類似這樣::

          <a href="url">鏈接文本</a>

          href 屬性描述了鏈接的目標。.

          實例

          <a >訪問菜鳥教程</a>

          上面這行代碼顯示為:: 訪問菜鳥教程

          點擊這個超鏈接會把用戶帶到菜鳥教程的首頁。

          提示: "鏈接文本" 不必一定是文本。圖片或其他 HTML 元素都可以成為鏈接。

          HTML 鏈接 - target 屬性

          使用 target 屬性,你可以定義被鏈接的文檔在何處顯示。

          下面的這行會在新窗口打開文檔:

          實例

          <a>訪問菜鳥教程!</a>

          HTML 鏈接- id 屬性

          id屬性可用于創建在一個HTML文檔書簽標記。

          提示: 書簽是不以任何特殊的方式顯示,在HTML文檔中是不顯示的,所以對于讀者來說是隱藏的。

          實例

          在HTML文檔中插入ID:

          <a id="tips">有用的提示部分</a>

          在HTML文檔中創建一個鏈接到"有用的提示部分(id="tips")":

          <a href="#tips">訪問有用的提示部分</a>

          或者,從另一個頁面創建一個鏈接到"有用的提示部分(id="tips")":

          <a >

          訪問有用的提示部分</a>

          基本的注意事項 - 有用的提示

          注釋: 請始終將正斜杠添加到子文件夾。假如這樣書寫鏈接:,就會向服務器產生兩次 HTTP 請求。這是因為服務器會添加正斜杠到這個地址,然后創建一個新的請求,就像這樣:。

          圖片鏈接

          如何使用圖片鏈接。

          在當前頁面鏈接到指定位置

          如何使用書簽

          跳出框架

          本例演示如何跳出框架,假如你的頁面被固定在框架之內。

          創建電子郵件鏈接

          本例演示如何如何鏈接到一個郵件。(本例在安裝郵件客戶端程序后才能工作。)

          建電子郵件鏈接 2

          本例演示更加復雜的郵件鏈接。

          HTML 鏈接標簽

          標簽描述
          <a>定義一個超級鏈接

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!


          ****聲明:此實例僅用于學習 *****

          1.網頁重定向 。

          在分析房天下網站,不難發現每個網頁有個重定向,比如:訪問網頁https://cd.esf.fang.com/chushou/3_211293494.htm會跳轉至https://cd.esf.fang.com/chushou/3_211293494.htm?rfss=1-b71f212cbb874a451c-3a 這個網頁,其實兩個地址打開的是同一個網頁

          解決方法:在原網頁源代碼中找到重定向網址,request 新網址即可。

          response=requests.get(url,headers = headers)

          html=response.text

          #網頁重定向

          pat=re.compile(r'<a class="btn-redir".*?href="(.*?)">點擊跳轉')

          url=re.findall(pat,html)[0]

          response=requests.get(url,headers = headers)

          return response.text

          2.bs4獲取標簽內容,部分代碼

          BeautifulSoup4是爬蟲必學的技能。BeautifulSoup最主要的功能是從網頁抓取數據,Beautiful Soup自動將輸入文檔轉換為Unicode編碼,輸出文檔轉換為utf-8編碼。BeautifulSoup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,如果我們不安裝它,則 Python 會使用 Python默認的解析器,lxml 解析器更加強大,速度更快,推薦使用lxml 解析器。網上相關文章和介紹很多,不在此啰嗦。

          temp_dict['房源']=soup.find('title').string

          temp_dict['小區'] = soup.find('div',id="xq_message").get_text()

          temp_dict['總價']=soup.find('div',class_="tab-cont-right").find('div',class_="trl-item price_esf sty1").get_text()

          3.將數據保存在csv文件中。

          我們將獲取房源信息的數據保存在一個temp_dict字典中,然后我們定義一個函數傳入一個列表(表頭用)和字典數據,就可以將數據保存在CSV文件中啦。

          def save_data_csv(keyword_list,dict_data):

          if not os.path.exists('fang.csv'):

          with open('fang.csv', "w", newline='', encoding='utf-8') as csvfile: # newline='' 去除空白行

          writer = csv.DictWriter(csvfile, fieldnames=keyword_list) # 寫字典的方法

          writer.writeheader() # 寫表頭的方法

          # 接下來追加寫入內容

          with open('fang.csv', "a", newline='', encoding='utf-8') as csvfile: # newline='' 一定要寫,否則寫入數據有空白行

          writer = csv.DictWriter(csvfile, fieldnames=keyword_list)

          writer.writerow(dict_data) # 按行寫入數據

          print("^_^ write success")

          4.完整代碼

          感覺寫的還是有點啰嗦。

          import re,requests,time,os

          from bs4 import BeautifulSoup

          from lxml import etree

          import json

          import csv

          def get_html(url):

          headers={

          'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36',

          'cookie':'city=cd; __utma=147393320.989730142.1589024416.1589024416.1589024416.1; __utmc=147393320; __utmz=147393320.1589024416.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmt_t0=1; __utmt_t1=1; __utmt_t2=1; global_cookie=9ekumblkqetgf7unt5iefiegk1nk9zk41by; logGuid=08b2183e-66fd-4851-8c49-20b9c55f4562; Integrateactivity=notincludemc; csrfToken=ZEhmg2XlXN8rivcJcEqBk4FO; budgetLayer=1%7Ccd%7C2020-05-09%2019%3A41%3A50; g_sourcepage=esf_fy%5Exq_pc; lastscanpage=0; __utmb=147393320.15.10.1589024416; unique_cookie=U_9ekumblkqetgf7unt5iefiegk1nk9zk41by*4',

          'authority': 'cd.esf.fang.com',

          'path': '/staticsearchlist/EsfListAjax/GetAIDaoGou?pagesize=5',

          }

          response=requests.get(url,headers = headers)

          html=response.text

          #網頁重定向

          pat=re.compile(r'<a class="btn-redir".*?href="(.*?)">點擊跳轉')

          url=re.findall(pat,html)[0]

          response=requests.get(url,headers = headers)

          return response.text

          #print(html)

          def get_fang_url(html):

          soup = etree.HTML(html)

          urls = soup.xpath('//dd/h4[@class="clearfix"]/a/@href')

          return urls

          def save_data_csv(keyword_list,dict_data):

          if not os.path.exists('fang.csv'):

          with open('fang.csv', "w", newline='', encoding='utf-8') as csvfile: # newline='' 去除空白行

          writer = csv.DictWriter(csvfile, fieldnames=keyword_list) # 寫字典的方法

          writer.writeheader() # 寫表頭的方法

          # 接下來追加寫入內容

          with open('fang.csv', "a", newline='', encoding='utf-8') as csvfile: # newline='' 一定要寫,否則寫入數據有空白行

          writer = csv.DictWriter(csvfile, fieldnames=keyword_list)

          writer.writerow(dict_data) # 按行寫入數據

          print("^_^ write success")

          def parse_page(url,html):

          #去除網頁html里面的換行,以便更好的獲取數據

          html = "".join(line.strip() for line in html.split("\n"))

          #定義一個字典

          temp_dict={}

          soup=BeautifulSoup(html,'lxml')

          #采集房源信息

          temp_dict['房源']=soup.find('title').string

          temp_dict['小區'] = soup.find('div',id="xq_message").get_text()

          temp_dict['總價']=soup.find('div',class_="tab-cont-right").find('div',class_="trl-item price_esf sty1").get_text()

          temp_dict['戶型']=soup.find('div',class_="trl-item1 w146").find('div',class_="tt").get_text()

          temp_dict['建筑面積'] = soup.find('div', class_="trl-item1 w182").find('div', class_="tt").get_text()

          temp_dict['單價'] = soup.find('div', class_="trl-item1 w132").find('div', class_="tt").get_text()

          temp_dict['詳情頁'] = url

          temp_dict['經紀人'] = soup.find('a',id="kesfsfbxq_A01_03_03").get_text()

          print(temp_dict)

          keyword_list=['房源','小區','總價','戶型','建筑面積','單價','詳情頁','經紀人']

          save_data_csv(keyword_list,temp_dict)

          #主函數

          if __name__ == '__main__':

          #構造網址序列

          urls=['https://cd.esf.fang.com/house-a016749-b014906/i{}'.format(i) for i in range(1,101)]

          for url in urls:

          #獲取單頁數據

          html = get_html(url)

          #獲取單頁上房源的鏈接

          new_urls = get_fang_url(html)

          for url in new_urls:

          new_url = 'https://cd.esf.fang.com' + url

          #獲取HTML

          html = get_html(new_url)

          #解析網頁,保存數據

          parse_page(new_url,html)

          #防止被禁IP,每訪問完一頁,睡眠5秒

          time.sleep(5)

          5.獲取數據截圖


          相應的數據就get到了。


          主站蜘蛛池模板: 黑人一区二区三区中文字幕| 亚洲综合无码AV一区二区| 91福利国产在线观看一区二区| 99精品国产高清一区二区麻豆| 亚洲欧美日韩一区二区三区 | 97se色综合一区二区二区| 一区二区三区免费在线视频| 无码一区二区三区AV免费| 久久伊人精品一区二区三区| 精品日本一区二区三区在线观看 | 91国在线啪精品一区| 美女AV一区二区三区| 国产婷婷色一区二区三区深爱网| 亚洲男女一区二区三区| 亚洲AV无码一区二区乱子伦 | 日韩精品成人一区二区三区| 国产精品福利区一区二区三区四区| 最新中文字幕一区| 亚洲高清一区二区三区电影| 亚洲一区中文字幕| 一本一道波多野结衣AV一区| 3d动漫精品成人一区二区三| 麻豆文化传媒精品一区二区| 极品人妻少妇一区二区三区| 亚洲一区免费在线观看| 亚洲午夜一区二区三区| 无码丰满熟妇一区二区| 无码国产精品一区二区免费I6| 波多野结衣AV一区二区三区中文| 国精产品999一区二区三区有限| 国产欧美一区二区精品仙草咪| 国产精品美女一区二区| 福利视频一区二区牛牛| 国产一区麻豆剧传媒果冻精品 | 国产一区二区三区乱码在线观看 | 日本不卡免费新一区二区三区| 消息称老熟妇乱视频一区二区| 精品日韩亚洲AV无码一区二区三区| 久久精品国产第一区二区三区| 亚洲av无码一区二区三区四区| 国产日韩综合一区二区性色AV|