- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从页面中提取所有游轮。我发现我需要提出2个请求。一个用于获取总结果 + 引用个别邮轮,另一个用于邮轮本身。到目前为止,我成功发出了请求并获得了 JSON
。问题是该请求仅返回第一页中包含的引用。最初我用的是这个:
https://www.pocruises.com.au/sc_ignore/b2c/cruiseresults/searchresults
作为 POST
请求 URL。我是请求中的一些 header :
Host: www.pocruises.com.au
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://www.pocruises.com.au/cruises/search
Content-Type: application/json;charset=utf-8
Content-Length: 613
Cookie: ASP.NET_SessionId=zm50ahxa4uoiwcuowgkeizcn; SC_ANALYTICS_GLOBAL_COOKIE=f459da6904ee4cea8a809455f37b09c5|False; optimizelyEndUserId=oeu1480435687102r0.9194470051495017; optimizelySegments=%7B%223906442756%22%3A%22none%22%2C%223911484226%22%3A%22ff%22%2C%223917223299%22%3A%22direct%22%2C%223920524266%22%3A%22false%22%2C%224924982297%22%3A%22true%22%7D; optimizelyBuckets=%7B%227883701652%22%3A%227867701359%22%7D; _ga=GA1.3.1128287966.1480435688; AdBlockDetected=false; _msuuid_29439mm27589=D0670AB5-C96A-4706-A563-9F29FCA3D9D2; gwcc=%7B%22fallback%22%3A%221300159454%22%2C%22clabel%22%3A%22ykseCIGywFkQhoDuxQM%22%2C%22backoff%22%3A86400%2C%22backoff_expires%22%3A1480522087%7D; gaFindACruise=; _gat=1; optimizelyPendingLogEvents=%5B%22n%3Dengagement%26u%3Doeu1480435687102r0.9194470051495017%26wxhr%3Dtrue%26time%3D1480437791.708%26f%3D7274530066%2C7883701652%26g%3D3909534788%22%5D
Connection: keep-alive
到目前为止,如果不算我返回的仅有 6 个结果,它仍然有效。在这篇文章发表时他们一定已经 106 岁了。响应包含包含总计数(正确)和页码、总页数等的元数据。然后我看到了这个: Firefox Screenshot此请求正文
包含我在所有页面中导航所需的所有内容。这是我到目前为止的全部代码:
import requests
url = "https://www.pocruises.com.au/sc_ignore/b2c/cruiseresults/searchresults"
session = requests.session()
data = {"searchParameters": {"p": [], "c": [], "d": [], "s": [], "ms": [], "adv": [], "sort": "dpa", "page": 5},
"renderingParameters": {"DefaultSortOption": "dpa", "LargeScreenFlag": "true", "NewModelIsLoading": "false",
"PagingAnchor": "", "ViewStyleSelectorVisible": "true", "FilterBarVisible": "true",
"NumberOfResultsAndSortByPanelVisible": "true", "DefaultResultsView": "Grid",
"MaxNumberOfResults": 0, "PaginationEnabled": "true", "KeepPageState": "true",
"PageSize": 9, "DefaultResultsGrouping": "Itinerary", "Duration": [],
"CruiseItinerary": [], "Voyage": [], "ExcludeVoyage": [], "PromoCode": [],
"AdditionalPromoCodes": []}}
headers = {"Host": "www.pocruises.com.au",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0",
"Accept": "application/json, text/plain, */*", "Accept-Language": "en-US,en;q=0.5",
"Content-Type": "application/json;charset=utf-8",
"Cookie": "ASP.NET_SessionId=zm50ahxa4uoiwcuowgkeizcn; "
"SC_ANALYTICS_GLOBAL_COOKIE=f459da6904ee4cea8a809455f37b09c5|False; "
"optimizelyEndUserId=oeu1480435687102r0.9194470051495017; "
"optimizelySegments=%7B%223906442756%22%3A%22none%22%2C%223911484226%22%3A%22ff%22%2C"
"%223917223299%22%3A%22direct%22%2C%223920524266%22%3A%22false%22%2C%224924982297%22%3A%22true"
"%22%7D; optimizelyBuckets=%7B%227883701652%22%3A%227867701359%22%7D; "
"_ga=GA1.3.1128287966.1480435688; AdBlockDetected=false; "
"_msuuid_29439mm27589=D0670AB5-C96A-4706-A563-9F29FCA3D9D2; "
"gwcc=%7B%22fallback%22%3A%221300159454%22%2C%22clabel%22%3A%22ykseCIGywFkQhoDuxQM%22%2C"
"%22backoff%22%3A86400%2C%22backoff_expires%22%3A1480522087%7D; gaFindACruise=; _gat=1; "
"optimizelyPendingLogEvents=%5B%5D",
"Connection": "keep-alive"}
session.headers.update(headers)
page = session.post(url, headers=headers, data=data)
cruise_data = page.json()
print(cruise_data)
session.headers.update(headers)
page = session.post(url, headers=headers, data=data)
cruise_data = page.json()
但现在我收到此错误:
Traceback (most recent call last):
File "/home/fixxxer/PycharmProjects/POCruses/main.py", line 31, in <module>
cruise_data = page.json()
File "/usr/lib/python3.5/site-packages/requests/models.py", line 841, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我想我的body
部分做错了。如何在请求中添加此正文?编辑:如果我删除 data
参数,请求工作正常,但信息不是我需要的。如果我用浏览器打开页面并检查发送到浏览器的响应,我会得到以下信息: ScreenShot即使这与我在没有 body
的情况下得到的结果也不同。这就是我知道这个 body
是重要信息的方式。
最佳答案
该页面需要的数据为 JSON
所以你需要
page = session.post(url, json=data)
顺便说一句:
服务器总是将新的 cookie 分配给新的客户端 - 特别是 cookie 行 ASP.NET_SessionId
- 更好GET
在执行其他请求之前获取新 cookie 的主页。
session.headers.update(headers)
之后你不必使用headers=headers
在get()
/post()
。如果某些请求需要一些额外的 header ,您可能只需更改一些 header 。
如果您使用json=
然后它会自动添加标题 "Content-Type": "application/json;charset=utf-8"
完整代码可能如下所示:
import requests
# -- create session ---
session = requests.session()
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0",
"Accept": "application/json, text/plain, */*",
"Accept-Language": "en-US,en;q=0.5",
"Connection": "keep-alive"
}
# set headers for all requests
session.headers.update(headers)
# --- get cookies ---
url = "https://www.pocruises.com.au/"
page = session.get(url)
# --- search ---
data = {
"searchParameters": {
"p": [],
"c": [],
"d": [],
"s": [],
"ms": [],
"adv": [],
"sort": "dpa",
"page": 5
},
"renderingParameters": {
"DefaultSortOption": "dpa",
"LargeScreenFlag": "true",
"NewModelIsLoading": "false",
"PagingAnchor": "",
"ViewStyleSelectorVisible": "true",
"FilterBarVisible": "true",
"NumberOfResultsAndSortByPanelVisible": "true",
"DefaultResultsView": "Grid",
"MaxNumberOfResults": 0,
"PaginationEnabled": "true",
"KeepPageState": "true",
"PageSize": 9,
"DefaultResultsGrouping": "Itinerary",
"Duration": [],
"CruiseItinerary": [],
"Voyage": [],
"ExcludeVoyage": [],
"PromoCode": [],
"AdditionalPromoCodes": []
}
}
url = "https://www.pocruises.com.au/sc_ignore/b2c/cruiseresults/searchresults"
# `json=` add `"Content-Type": "application/json;charset=utf-8"`
page = session.post(url, json=data)
print(page.text)
cruise_data = page.json()
print(cruise_data)
关于python - 如何在 Python 中使用请求将正文包含到 POST 请求中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40871855/
我有一个类似于以下的结构。 class A { string title; List bItem; } class B { int pric
本地流 和 远程流 两者都是“媒体流列表 ”。 本地流 包含“本地媒体流 ” 对象 但是,远程流 包含“媒体流 ” 对象 为什么差别这么大? 当我使用“本地流 “- 这个对我有用: localVide
我正在尝试将 8 列虚拟变量转换为 8 级排名的一列。 我试图用这个公式来做到这一点: =IF(OR(A1="1");"1";IF(OR(B1="1");"2";IF(OR(C1="1");"3";I
我正在使用面向对象编程在 Python 中创建一个有点复杂的棋盘游戏的实现。 我的问题是,许多这些对象应该能够与其他对象交互,即使它们不包含在其中。 例如Game是一个对象,其中包含PointTrac
有没有办法获取与 contains 语句匹配的最深元素? 基本上,如果我有嵌套的 div,我想要最后一个元素而不是父元素: Needle $("div:contains('Needle')")
出于某种原因,我无法在 Google 上找到答案!但是使用 SQL contains 函数我怎么能告诉它从字符串的开头开始,即我正在寻找等同于的全文 喜欢 'some_term%'。 我知道我可以使用
我正在尝试创建一个正则表达式来匹配具有 3 个或更多元音的字符串。 我试过这个: [aeiou]{3,} 但它仅在元音按顺序排列时才有效。有什么建议吗? 例如: 塞缪尔 -> 有效 琼 -> 无效 S
嘿所以我遇到了这样的情况,我从数据库中拉回一个客户,并通过包含的方式包含所有案例研究 return (from c in db.Clients.Include("CaseStudies")
如果关键字是子字符串,我无法弄清楚为什么这个函数不返回结果。 const string = 'cake'; const substring = 'cak'; console.log(string.in
我正在尝试将包含特定文本字符串的任何元素更改为红色。在我的示例中,我可以将子元素变为蓝色,但是我编写“替换我”行的方式有些不正确;红色不会发生变化。我注意到“contains”方法通常写为 :cont
我想问一下我是否可以要求/包含一个语法错误的文件,如果不能,则require/include返回一个值,这样我就知道所需/包含的文件存在语法错误并且不能被要求/包含? file.php语法错误 inc
我想为所有包含youtube链接的链接添加一个rel。 这就是我正在使用的东西-但它没有用。有任何想法吗? $('a [href:contains(“youtube.com”)]')。attr('re
我正在尝试在 Elasticsearch 中查询。除搜索中出现“/”外,此功能均正常运行。查询如下所示 GET styling_rules/product_line_filters/_search {
我正在开发名为eBookRepository的ASP.NET MVC应用程序,其中包含在线图书。 电子书具有自己的标题,作者等。因此,现在我正在尝试实现搜索机制。我必须使用Elasticsearch作
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
我的问题是我可以给出条件[ 'BookTitleMaster.id' => $xtitid, ] 如下所示 $bbookinfs = $this->BookStockin->BookIssue->fi
我需要能够使用 | 检查模式在他们中。例如,对于像“dtest|test”这样的字符串,像 d*|*t 这样的表达式应该返回 true。 我不是正则表达式英雄,所以我只是尝试了一些事情,例如: Reg
我想创建一个正则表达式来不匹配某些单词... 我的字符:var test = "é123rr;and;ià456;or;456543" 我的正则表达式:test.match(\((?!and)(?!o
我在 XSLT 中有一个名为 variable_name 的变量,如果相关产品具有名称为 A 或 B 或两者均为 A & 的属性,我将尝试将其设置为 1 B.
您好,我想让接待员和经理能够查看工作类型和费率并随后进行更新。但是技术人员只能查看不能更新。该图是否有效? 我读到扩展用例是由发起基本用例的参与者发起的。我应该如何区分技术人员只能启动基本案例而不能启
我是一名优秀的程序员,十分优秀!