如何下载网址的源代码并查找特定文本

时间:2016-06-21 05:27:01

标签: php regex curl web-scraping preg-match

我想从url下载源代码并找出特定文本并将其存储到变量中。

假设我有网址http://www.homedepot.com/p/Ryobi-185-MPH-510-CFM-Gas-Backpack-Blower-RY08420A/203312654

我想下载其源代码并找到下面的源代码底部文本。 还将每个变量(如CI_PagetypeCI_ItemID存储在php变量中,以便将其存储在csv文件中。

<script>
    var CI_Pagetype = 'PRODUCT';
    var CI_ItemID = '203312654';
    var CI_ItemName = '185 MPH 510 CFM Gas Backpack Blower';
    var CI_CatID = '556375';
    var CI_CatName = '';
    var CI_ItemPrice = $('#ciItemPrice').val();
    var CI_ItemMfr = 'Ryobi';
    var CI_ItemMfrNum = '573539';
    var CI_ItemUPC = '046396001122';
    var CI_ItemAvailability = $('#ciItemAvailability').val();
    var CI_ItemISBN = '';
    var CI_ItemShipWeight = '22';

目前我可以使用下载源代码 的file_get_contents();

但我不确定如何编写正则表达式或提取该数据。

请帮我找出解决方案。

1 个答案:

答案 0 :(得分:2)

通过此网站:https://regex101.com/

使用此正则表达式:var (CI_)([A-Za-z0-9]*) = '([a-zA-z0-9 ]*)';

将其与g(全局)参数

一起使用

对于此示例:

    <script>
var CI_Pagetype = 'PRODUCT';
var CI_ItemID = '203312654';
var CI_ItemName = '185 MPH 510 CFM Gas Backpack Blower';
var CI_CatID = '556375';
var CI_CatName = '';
var CI_ItemPrice = $('#ciItemPrice').val();
var CI_ItemMfr = 'Ryobi';
var CI_ItemMfrNum = '573539';
var CI_ItemUPC = '046396001122';
var CI_ItemAvailability = $('#ciItemAvailability').val();
var CI_ItemISBN = '';
var CI_ItemShipWeight = '22';

var bcData = new Object();

结果:

MATCH 1
1.  [19-22] `CI_`
2.  [22-30] `Pagetype`
3.  [34-41] `PRODUCT`
MATCH 2
1.  [52-55] `CI_`
2.  [55-61] `ItemID`
3.  [65-74] `203312654`
MATCH 3
1.  [85-88] `CI_`
2.  [88-96] `ItemName`
3.  [100-135]   `185 MPH 510 CFM Gas Backpack Blower`
MATCH 4
1.  [146-149]   `CI_`
2.  [149-154]   `CatID`
3.  [158-164]   `556375`
MATCH 5
1.  [175-178]   `CI_`
2.  [178-185]   `CatName`
3.  [189-189]   ``
MATCH 6
1.  [248-251]   `CI_`
2.  [251-258]   `ItemMfr`
3.  [262-267]   `Ryobi`
MATCH 7
1.  [278-281]   `CI_`
2.  [281-291]   `ItemMfrNum`
3.  [295-301]   `573539`
MATCH 8
1.  [312-315]   `CI_`
2.  [315-322]   `ItemUPC`
3.  [326-338]   `046396001122`
MATCH 9
1.  [411-414]   `CI_`
2.  [414-422]   `ItemISBN`
3.  [426-426]   ``
MATCH 10
1.  [437-440]   `CI_`
2.  [440-454]   `ItemShipWeight`
3.  [458-460]   `22`

价格和可用性是功能所以没有价值。

$re = "/var (CI_)([A-Za-z0-9]*) = '([a-zA-z0-9 ]*)';/"; 
$str = "<script>\nvar CI_Pagetype = 'PRODUCT';\nvar CI_ItemID = '203312654';\nvar CI_ItemName = '185 MPH 510 CFM Gas Backpack Blower';\nvar CI_CatID = '556375';\nvar CI_CatName = '';\nvar CI_ItemPrice = \$('#ciItemPrice').val();\nvar CI_ItemMfr = 'Ryobi';\nvar CI_ItemMfrNum = '573539';\nvar CI_ItemUPC = '046396001122';\nvar CI_ItemAvailability = \$('#ciItemAvailability').val();\nvar CI_ItemISBN = '';\nvar CI_ItemShipWeight = '22';\n\nvar bcData = new Object();"; 

preg_match_all($re, $str, $matches);