错误403禁止taobao解析

时间:2017-09-22 18:27:58

标签: php parsing curl web-scraping

我试图解析淘宝,product card

数据为here

在浏览器中,数据页面正常加载: enter image description here

enter image description here

但在过渡时我得到403 Forbidden:

enter image description here

如何使用php解决此限制 请帮助,非常需要客户抱怨

2 个答案:

答案 0 :(得分:2)

detailskip.taobao.com/json/dyn_combo.do阻止任何没有“referrer”标题指向另一个detailskip.taobao.com网址的请求。请注意,引用者不必是真实的,你可以伪造它,它们实际上没有验证它,标题只需要在那里。此外,他们在用户代理标头中使用“php”阻止任何请求。它们也会阻止任何没有用户代理标头的请求。

示例代码伪造referrer头和user-agent以获取json(使用my hhb_curl library作为错误检测curl_函数的包装器):

<?php
declare(strict_types = 1);
header ( "content-type: text/plain;charset=utf8" );
require_once ('hhb_.inc.php');
$json = (new hhb_curl ( '', true ))->setopt_array ( array (
        CURLOPT_URL => 'https://detailskip.taobao.com/json/dyn_combo.do?itemId=556926591992&databiz=promotionPrice,upp,bonuscoupon,shopbonuscoupon,shopbonuscoupon,shopcoupon,sidebarcoupon,overseaNewDelivery,dynStock,overseaViewer,contract,activitySwitch,buycount',
        CURLOPT_USERAGENT => 'curl/7.52.1',
        CURLOPT_HTTPHEADER => array (
                'Referer: https://world.taobao.com/item/556926591992.html' 
        ) 
) )->exec ()->getStdOut();
echo $json;

答案 1 :(得分:1)

你究竟能解析什么?我没有解析产品价格和产品名称的问题,

<?php
declare(strict_types = 1);
$html = file_get_contents ( 'https://world.taobao.com/item/556926591992.html' );
$domd = @DOMDocument::loadHTML ( $html );
$xp = new DOMXPath ( $domd );
$name = $xp->query ( '//span[@itemprop="name"]' )->item ( 0 )->textContent;
$price = trim ( preg_replace ( '/\s+/u', ' ', $xp->query ( '//div[contains(@class,"price-show") and not(contains(@class,"hidden"))]' )->item ( 0 )->textContent ) );
var_dump ( $name, $price );

输出:

 string(82) "欧美高街bf风潮牌oversize宽松男女嘻哈hiphop套头卫衣情侣装外套"
 string(9) "¥ 189.00"

(和protip,curl会因为它对内容长度的理解而运行得更快,而file_get_contents仅在套接字关闭时才会读取,如果使用CURLOPT_ENCODING,curl将使用相当少的带宽,因为这个网站和curl支持file_get_contents不支持的gzip压缩传输,curl不依赖于allow_url_fopen php.ini设置,file_get_contents需要)