hj170520 发表于 2020-5-25 12:45

另外一个关于request无法定位新网页的问题(python)

本帖最后由 hj170520 于 2020-5-25 15:08 编辑

源代码如下:我准备爬取图书馆的“试用资源”,可能该网页网友无法打开。。。
我就先把问题抛出来吧!
import requests

url = 'http://www.htcases.com/kw/content/v_pdf.html?dbId=6&&caseId=40889&&caseType=1&&fileUrl='

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-language': 'en-GB,en-US;q=0.9,en;q=0.8,ko;q=0.7'
    # 'Referer': 'http://www.htcases.com/kw/content/v_pdf.html?dbId=6&&caseId=40889&&caseType=1&&fileUrl='
}

req = requests.get(url, headers=headers, allow_redirects=False)

print(req.text)
返回来的值是
<!DOCTYPE html>
<html>
<title></title> <!-- jQuery -->
<script type="text/javascript" src="/res/front/js/jquery-all.min.js"></script>
<script type="text/javascript" src="/res/front/js/jquery-form.js"></script>
<script type="text/javascript" src="/res/front/js/jquery-ui.min.js"></script>

<script type="text/javascript" src="/res/front/js/jquery.validationEngine.js"></script>
<script type="text/javascript" src="/res/front/js/jquery.validationEngine-zh_CN.js"></script>
<script type="text/javascript" src="/res/front/js/jquery-ui-1.8.18.custom.min.js"></script>

<!-- <script type="text/javascript" src="/res/front/js/iepng.js"></script> -->
<script type="text/javascript" src="/res/front/js/P_Style.js"></script>
<script type="text/javascript" src="/res/front/js/HT_JScript.js"></script>
<script type="text/javascript" src="/res/front/js/jquery.corner.js"></script>
<!--
<script type="text/javascript" src="/res/front/js/JScript.20130614.js"></script>
-->
<script type="text/javascript" src="/res/front/js/helpTree.js"></script>
<!--<script type="text/javascript" src="/res/front/js/h.js"></script> -->
<script type="text/javascript" src="/res/front/js/sweetalert.min.js"></script>
<script type="text/javascript" src="/res/common/My97DatePicker/WdatePicker.js"></script>
<body>
      <form id="pdfReaderForm" action="/kw/content/v_reader.html" method="post">
                <input type="hidden" id="dbId" name="dbId" value="6" />
                <input type="hidden" id="caseId" name="caseId" value="40889" />
                <input type="hidden" id="caseType" name="caseType" value="1" />
                <input type="hidden" id="fileUrl" name="fileUrl" value="" />
      </form>
</body>
<script type="text/javascript">
      $(function() {
                $("#pdfReaderForm").submit();
      });
</script>
</html>


但问题是当我把http://www.htcases.com/kw/content/v_pdf.html?dbId=6&&caseId=40889&&caseType=1&&fileUrl= 输入浏览器的时候,
自动跳转到一个http://www.htcases.com/kw/content/v_reader.html 的一个查看pdf的网页,我通过抓包是可以抓到这个pdf文件的地址的。
但是这个跳转页面v_reader.html我没办法抓到它的源代码,所以无法爬取它的地址。
怎么办呢


上一个话题是跳转的代码在headers里的location,
莫非这个转址存在于js? js我知之甚少!{:301_1002:}

倾何 发表于 2020-5-25 13:47

<!DOCTYPE html>
<html>
<title></title> <!-- jQuery -->
<script type="text/javascript" src="/res/front/js/jquery-all.min.js"></script>
<script type="text/javascript" src="/res/front/js/jquery-form.js"></script>
<script type="text/javascript" src="/res/front/js/jquery-ui.min.js"></script>

<script type="text/javascript" src="/res/front/js/jquery.validationEngine.js"></script>
<script type="text/javascript" src="/res/front/js/jquery.validationEngine-zh_CN.js"></script>
<script type="text/javascript" src="/res/front/js/jquery-ui-1.8.18.custom.min.js"></script>

<!-- <script type="text/javascript" src="/res/front/js/iepng.js"></script> -->
<script type="text/javascript" src="/res/front/js/P_Style.js"></script>
<script type="text/javascript" src="/res/front/js/HT_JScript.js"></script>
<script type="text/javascript" src="/res/front/js/jquery.corner.js"></script>
<!--
<script type="text/javascript" src="/res/front/js/JScript.20130614.js"></script>
-->
<script type="text/javascript" src="/res/front/js/helpTree.js"></script>
<!--<script type="text/javascript" src="/res/front/js/h.js"></script> -->
<script type="text/javascript" src="/res/front/js/sweetalert.min.js"></script>
<script type="text/javascript" src="/res/common/My97DatePicker/WdatePicker.js"></script>
<body>
    <form id="pdfReaderForm" action="/kw/content/v_reader.html" method="post">
      <input type="hidden" id="dbId" name="dbId" value="6" />
      <input type="hidden" id="caseId" name="caseId" value="40889" />
      <input type="hidden" id="caseType" name="caseType" value="1" />
      <input type="hidden" id="fileUrl" name="fileUrl" value="" />
    </form>
</body>
<script type="text/javascript">
    $(function() {
      $("#pdfReaderForm").submit();
    });
</script>
</html>

首先呢,看下你这段js,其实这个表单就是pdfReaderForm是一个Post参数提交,使用了jQuery 事件 - submit() 方法
https://www.w3school.com.cn/jquery/event_submit.asp

zheng10072 发表于 2020-5-25 13:50

跳转地址在相应头里面

    print(req.headers)
    print(req.text)

ReLoading 发表于 2020-5-25 13:56

带上你的cookies 提交 post,字段参数 以及url,按照下面的填写,建议使用session,可保持cookies
<body>
    <form id="pdfReaderForm" action="/kw/content/v_reader.html" method="post">
      <input type="hidden" id="dbId" name="dbId" value="6" />
      <input type="hidden" id="caseId" name="caseId" value="40889" />
      <input type="hidden" id="caseType" name="caseType" value="1" />
      <input type="hidden" id="fileUrl" name="fileUrl" value="" />
    </form>
</body>

hj170520 发表于 2020-5-25 14:34

zheng10072 发表于 2020-5-25 13:50
跳转地址在相应头里面

    print(req.headers)


print(req.headers)
返回的是
{'Server': 'Apache-Coyote/1.1', 'Set-Cookie': 'JSESSIONID=5037F73E60C464A38CF22A05DE9E4BEE; Path=/; HttpOnly', 'Content-Type': 'text/html;charset=UTF-8', 'Content-Language': 'en-GB', 'Transfer-Encoding': 'chunked', 'Date': 'Mon, 25 May 2020 06:34:28 GMT'}

hj170520 发表于 2020-5-25 14:48

ReLoading 发表于 2020-5-25 13:56
带上你的cookies 提交 post,字段参数 以及url,按照下面的填写,建议使用session,可保持cookies

   
...

我这些参数应该包含在了这个网址里。
url = 'http://www.htcases.com/kw/content/v_pdf.html?dbId=6&&caseId=40889&&caseType=1&&fileUrl='
然后它自己拿着这个参数打开了
‘http://www.htcases.com/kw/content/v_reader.html ’


如果我直接把这个dbId=6;caseId=40889;caseType=1;fileUrl=‘’ 参数都发送给‘http://www.htcases.com/kw/content/v_reader.html ’
返回的status_code值不是200了
{:301_1003:}

hj170520 发表于 2020-5-25 15:03

ReLoading 发表于 2020-5-25 13:56
带上你的cookies 提交 post,字段参数 以及url,按照下面的填写,建议使用session,可保持cookies

   
...

{:301_975:}我成功了,谢谢哥

hj170520 发表于 2020-5-25 15:04

倾何 发表于 2020-5-25 13:47





可以了,哥!
我改了哥cookies 以及给reader.html提交了个表单,返回了我需要的源代码{:301_1003:}

fanvalen 发表于 2020-5-25 15:29

想要模拟登录请用requests.post,post的data自己用浏览器f12找字段

hj170520 发表于 2020-5-25 16:30

fanvalen 发表于 2020-5-25 15:29
想要模拟登录请用requests.post,post的data自己用浏览器f12找字段

{:301_986:}我用cookies 登陆的,这个用的是图书馆的资源(他们是识别cookies,应该是这样的)
页: [1]
查看完整版本: 另外一个关于request无法定位新网页的问题(python)