Fiddler 手機爬蟲

Fiddler抓包工具

配置Fiddler

  1. 添加證書信任,Tools - Options - HTTPS,勾選 Decrypt Https Traffic 後彈出窗口,一路確認
  2. ...from browsers only 設置只抓取瀏覽器的數據包
  3. Tools - Options - Connections,設置監聽端口(默認為8888)
  4. 關閉Fiddler,再打開Fiddler,配置完成後重啟Fiddler(重要)

配置瀏覽器代理

1、安裝Proxy SwitchyOmega插件

2、瀏覽器右上角:SwitchyOmega->選項->新建情景模式->AID1901(名字)->創建

輸入 :HTTP:// 127.0.0.1 8888

點擊 :應用選項

3、點擊右上角SwitchyOmega可切換代理

Fiddler常用菜單

1、Inspector :查看數據包詳細內容

整體分為請求和響應兩部分

2、常用菜單

Headers :請求頭信息

WebForms: POST請求Form表單數據 :

GET請求查詢參數: <querystring>

Raw 將整個請求顯示為純文本

手機設置

正常版

1、設置手機

Fiddler 手機爬蟲

Fiddler 手機爬蟲

Fiddler 手機爬蟲

Fiddler 手機爬蟲

Fiddler 手機爬蟲

Fiddler 手機爬蟲

Fiddler 手機爬蟲

2、設置Fiddler

Fiddler 手機爬蟲

Fiddler 手機爬蟲

Fiddler 手機爬蟲

最後重啟Fiddler。

如果遇到問題

在計算機中win+R,輸入regedit打開註冊表,找到fiddler,右鍵新建點擊OWORD(64位)值Q,

名稱:80;類型:REG_DWORD;數據:0x00000000(0)

Fiddler在上面的設置下,加上:菜單欄Rules-->Customize Rules...-->重啟Fiddler

移動端app數據抓取

有道翻譯手機版破解案例

import requests
from lxml import etree


word = input('請輸入要翻譯的單詞:')
url = 'http://m.youdao.com/translate'
data = {
'inputtext': word,
'type': 'AUTO',
}

html = requests.post(url,data=data).text
parse_html = etree.HTML(html)
result = parse_html.xpath('//ul[@id="translateResult"]/li/text()')[0]

print(result)

途牛旅遊

目標:完成途牛旅遊爬取系統,輸入出發地、目的地,輸入時間,抓取熱門景點信息及相關評論

地址

1、地址: http://www.tuniu.com/

2、熱門 - 搜索

3、選擇: 相關目的地、出發城市、出遊時間(出發時間和結束時間)點擊確定

4、示例地址如下:

http://s.tuniu.com/search_complex/whole-sh-0-%E7%83%AD%E9%97%A8/list-a{觸發時間}_{結束時間}-{出發城市}-{相關目的地}/

項目實現

1、創建項目

scrapy startproject Tuniu
cd Tuniu
scrapy genspider tuniu tuniu.com

2、定義要抓取的數據結構 - items.py

# 一級頁面
# 標題 + 鏈接 + 價格 + 滿意度 + 出遊人數 + 點評人數 + 推薦景點 + 供應商
title = scrapy.Field()
link = scrapy.Field()
price = scrapy.Field()
satisfaction = scrapy.Field()
travelNum = scrapy.Field()

reviewNum = scrapy.Field()
recommended = scrapy.Field()
supplier = scrapy.Field()

# 二級頁面
# 優惠券 + 產品評論
coupons = scrapy.Field()
cp_comments = scrapy.Field()

3、爬蟲文件數據分析與提取

頁面地址分析

http://s.tuniu.com/search_complex/whole-sh-0-熱門/list-a20190828_20190930-l200-m3922/

# 分析

list-a{出發時間_結束時間-出發城市-相關目的地}/

# 如何解決?

提取 出發城市及目的地城市的字典,key為城市名稱,value為其對應的編碼

# 提取字典,定義config.py存放

代碼實現

# -*- coding: utf-8 -*-
import scrapy
from ..config import *
from ..items import TuniuItem
import json

class TuniuSpider(scrapy.Spider):
name = 'tuniu'
allowed_domains = ['tuniu.com']

def start_requests(self):

s_city = input('出發城市:')
d_city = input('相關目的地:')
start_time = input('出發時間(20190828):')
end_time = input('結束時間(例如20190830):')
s_city = src_citys[s_city]
d_city = dst_citys[d_city]

url = 'http://s.tuniu.com/search_complex/whole-sh-0-%E7%83%AD%E9%97%A8/list-a{}_{}-{}-{}'.format(start_time,end_time,s_city, d_city)
yield scrapy.Request(url, callback=self.parse)

def parse(self, response):
# 提取所有景點的li節點信息列表
items = response.xpath('//ul[@class="thebox clearfix"]/li')

for item in items:
# 此處是否應該在for循環內創建?
tuniuItem = TuniuItem()
# 景點標題 + 鏈接 + 價格
tuniuItem['title'] = item.xpath('.//span[@class="main-tit"]/@name').get()
tuniuItem['link'] = 'http:' + item.xpath('./div/a/@href').get()
tuniuItem['price'] = int(item.xpath('.//div[@class="tnPrice"]/em/text()').get())
# 判斷是否為新產品
isnews = item.xpath('.//div[@class="new-pro"]').extract()
if not len(isnews):
# 滿意度 + 出遊人數 + 點評人數
tuniuItem['satisfaction'] = item.xpath('.//div[@class="comment-satNum"]//i/text()').get()
tuniuItem['travelNum'] = item.xpath('.//p[@class="person-num"]/i/text()').get()
tuniuItem['reviewNum'] = item.xpath('.//p[@class="person-comment"]/i/text()').get()
else:
tuniuItem['satisfaction'] = '新產品'
tuniuItem['travelNum'] = '新產品'
tuniuItem['reviewNum'] = '新產品'
# 包含景點+供應商
tuniuItem['recommended'] = item.xpath('.//span[@class="overview-scenery"]/text()').extract()
tuniuItem['supplier'] = item.xpath('.//span[@class="brand"]/span/text()').extract()

yield scrapy.Request(tuniuItem['link'], callback=self.item_info, meta={'item': tuniuItem})

# 解析二級頁面
def item_info(self, response):
tuniuItem = response.meta['item']

# 優惠信息
coupons = ','.join(response.xpath('//div[@class="detail-favor-coupon-desc"]/@title').extract())
tuniuItem['coupons'] = coupons

# 想辦法獲取評論的地址
# 產品點評 + 酒店點評 + 景點點評
productId = response.url.split('/')[-1]
# 產品點評
cpdp_url = 'http://www.tuniu.com/papi/tour/comment/product?productId={}'.format(productId)

yield scrapy.Request(cpdp_url, callback=self.cpdp_func, meta={'item': tuniuItem})

# 解析產品點評
def cpdp_func(self, response):
tuniuItem = response.meta['item']

html = json.loads(response.text)
comment = {}
for s in html['data']['list']:
comment[s['realName']] = s['content']

tuniuItem['cp_comments'] = comment

yield tuniuItem

4、管道文件處理 pipelines.py

print(dict(item))

5、設置settings.py

獲取出發城市和目的地城市的編號

tools.py

# 出發城市
# 基準xpath表達式
//*//*[@id="niuren_list"]/div[2]/div[1]/div[2]/div[1]/div/div[1]/dl/dd/ul/li[contains(@class,"filter_input")]/a
name : ./text()
code : ./@href [0].split('/')[-1].split('-')[-1]


# 目的地城市
# 基準xpath表達式
//*[@id="niuren_list"]/div[2]/div[1]/div[2]/div[1]/div/div[3]/dl/dd/ul/li[contains(@class,"filter_input")]/a
name : ./text()
code : ./@href [0].split('/')[-1].split('-')[-1]

代碼實現

import requests
from lxml import etree

url = 'http://s.tuniu.com/search_complex/whole-sh-0-%E7%83%AD%E9%97%A8/'
headers = {'User-Agent':'Mozilla/5.0'}

html = requests.get(url,headers=headers).text
parse_html = etree.HTML(html)
# 獲取出發地字典
# 基準xpath
li_list = parse_html.xpath('//*[@id="niuren_list"]/div[2]/div[1]/div[2]/div[1]/div/div[3]/dl/dd/ul/li[contains(@class,"filter_input")]/a')
src_citys = {}
dst_citys = {}
for li in li_list:
city_name_list = li.xpath('./text()')
city_code_list = li.xpath('./@href')
if city_name_list and city_code_list:
city_name = city_name_list[0].strip()
city_code = city_code_list[0].split('/')[-1].split('-')[-1]
src_citys[city_name] = city_code
print(src_citys)

# 獲取目的地字典
li_list = parse_html.xpath('//*[@id="niuren_list"]/div[2]/div[1]/div[2]/div[1]/div/div[1]/dl/dd/ul/li[contains(@class,"filter_input")]/a')
for li in li_list:
city_name_list = li.xpath('./text()')
city_code_list = li.xpath('./@href')
if city_name_list and city_code_list:
city_name = city_name_list[0].strip()
city_code = city_code_list[0].split('/')[-1].split('-')[-1]
dst_citys[city_name] = city_code
print(dst_citys)

原文:https://www.cnblogs.com/LXP-Never/p/11492429.html


分享到:


相關文章: