请选择 进入手机版 | 继续访问电脑版
返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

curl爬虫

[复制链接]
北极孤星的泪 显示全部楼层 发表于 2022-9-2 15:37:28 |阅读模式 打印 上一主题 下一主题

登录网站,浏览更多精彩内容

您需要 登录 才可以下载或查看,没有账号?加入我们

x
函数部分
' z% g& Y, x; Y8 B# \7 _& B
! G! P9 |9 P  {+ w- n' v) F
  1. /**
    * a0 i# X# r+ E$ U( r8 L9 c) G
  2. * 发起网络请求
    % r' ?/ Y2 ]8 _% B8 U$ e" V* d
  3. * @param string $url
    ! E$ P3 [7 @" E4 s
  4. * @param $data' E+ }% O& S8 Z4 U) u- d' Y3 Z
  5. * @param array $header
    $ a/ U, E/ h9 N& M6 X! i
  6. * @return bool|string! f% ~2 J# n" b. X" H
  7. */
    . C' A2 C- p) w, [
  8. function http_request(string $url, $data = [], array $header = []) {
    3 D" |4 u/ J  Z4 i
  9.     $ret = '';$ G' F* y" {+ K' t2 u: v
  10.     // 1、初始化
    $ R' S$ T7 w3 _! Z
  11.     $ch = curl_init();
    6 F# s6 M! c6 {0 {& t/ {
  12.     // 2、相关配置! K$ N4 J! {0 @0 ~. o' A
  13.     # 设置请求的URL地址6 j5 K  s  m% o5 O6 _
  14.     curl_setopt($ch, CURLOPT_URL, $url);
    ; t/ m& L1 |6 \  t
  15.     # 设置一下执行成功后不直接返回到客户端4 |  J) x6 B. c/ p9 v$ E: m! ^
  16.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    0 A% P* e- S* e
  17.     # 设置超时时间  单位是秒* p: F) ]; p+ u
  18.     curl_setopt($ch, CURLOPT_TIMEOUT, 30);( Y5 ^) @( ~. N) Y9 p
  19.     # 不进行证书的检测
    9 c3 t' J+ v0 [3 Z6 x( Y) E! _; l  t
  20.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);5 m" V7 x9 ]& x6 F1 X
  21.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);/ H, \' ]; z6 v7 K3 R9 \0 @7 h9 e
  22.     # 伪造一个请求的浏览器型号6 }% v7 n8 J! @: C
  23.     curl_setopt($ch, CURLOPT_USERAGENT, 'msie');( N9 u1 x+ j& G# Q) Z, d- j

  24. 2 I8 L) k! P5 N
  25.     // 表示有请求体,是POST的提交; d/ }. ?( {- R% ]3 L1 `
  26.     if (!empty($data)) {) U8 Q/ T' ^2 _; s
  27.         # 指明是一个POST请求
    . u( @$ J% ?2 Y. }: Q
  28.         curl_setopt($ch, CURLOPT_POST, 1);' }( I2 l" X  O1 d( `! e
  29.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    " S+ J) U) ?2 r5 G' o
  30.         if (is_string($data)) {) ^! O# U) U1 Z- {7 R- i$ P+ R
  31.             # 设置头信息,告诉接受者我们发送的数据类型* {  O0 j: M4 S) |
  32.             curl_setopt($ch, CURLOPT_HTTPHEADER, $header);, P* Y; P. ~) G8 q: P
  33.         }
    * L, {' W* l% p# F
  34.     }
    4 d' I/ T" S6 E* }! ^+ e' b" K
  35.     // 3、执行$ ^7 L7 K3 _  F# r% m/ G
  36.     $ret = curl_exec($ch);
    - y) |! p; n0 [
  37.     # 请求的错误码 为0表示请求正确,大于0则表求请求失败的
    0 q5 _1 x9 [4 A& }8 ?& G
  38.     if (curl_errno($ch) > 0) {( d  y" \' J- l: a1 ]5 k5 ]
  39.         echo curl_error($ch);4 w/ ?% N, m4 @0 t8 z1 l' Y
  40.         exit;
    % V: R/ B/ C5 M4 t  m. o
  41.     }
    % w% p- U, c* `' N* X" ]
  42.     // 4、关闭请求资源
    8 F) z2 p* ?7 D
  43.     curl_close($ch);
    & h, J1 k" E# {$ b& A% a" h
  44.     return $ret;+ f; q. R" Z; ^- q4 f4 p
  45. }
    6 i0 S( y6 r! L0 z  W/ w
复制代码
调用部分
. }* q: t, u' d$ m+ N
  1. //采集标题推荐使用curl需要手动开启
    , J! v9 F" P0 n- n. h+ P" c' Q
  2. //__DIR__获取当前目录
    0 A' `) ?0 T! u$ n8 s
  3. include __DIR__.'/function.php';
    9 ^& @9 N% P, J
  4. //$url='https://kandian.ke.com/detail/MjY3MzE1NzI=.html?beikefrom=pc_kd_index';" S' w1 J7 @8 l0 ?* k
  5. $url="https://www.aurrel.com/thread-17326-1-1.html";
    6 C7 l5 i1 N+ ]7 i5 ?; n
  6. $html=http_request($url);
复制代码

3 F! y. X# F8 {; i2 |+ _. c# d) b7 |8 h- i
商乾电商学院,中国最大的电商资源交流基地!

精彩评论1

北极孤星的泪 显示全部楼层 发表于 2022-9-6 14:16:55
调用部分也可以实例化一个DOMdocument对象,然后在查找路径的那种方式来找我们想要的内容6 X2 E# K6 X( W, b6 H- Z

: M) d  U5 N3 k
  1. //实例化一个dom对象6 ?0 Y9 F3 E# |7 S4 z
  2. //var_dump($html);
    , |& T( O  s  {& R, X
  3. $dom=new DOMDocument();3 _, u1 Z* i2 ~& X6 t4 u
  4. //加载html忽略html不严谨的格式6 @' W4 q+ [+ g( V# `
  5. libxml_use_internal_errors(1);  y" Z$ X3 `" ~" S
  6. //dom下面执行加载loadhtml方法7 j7 A6 Q" k" r- v
  7. $dom->loadHTML($html);5 b' l" l; Z4 H" J
  8. //将加载完的$dom对象当参数传递进去,转为xpath路径对象2 P9 H+ G6 g& F0 s
  9. $xpath=new DOMXPath($dom);& M9 ^( W: i5 S$ {+ K  X8 e+ H
  10. //查询路径值
    7 O" ^7 V) c- B
  11. $path='//*[@id="main-wrap"]/div/div[3]/div[1]/div/a';
复制代码
  1. //生成对应的路径列表数据
    8 N. t" h& m- z3 X
  2. $nodelist=$xpath->query($path);1 }# h4 O9 t. P
  3. //循环输出每一个对象调用他下面的属性取值
    , o# \0 C* o/ o
  4. foreach ($nodelist as $v){+ B! j$ m! b. D5 V/ F) l  n
  5.     var_dump($v->nodeValue);; `2 \& b  U. O  [* V
  6. }
    # R6 t( b" M; n5 \
复制代码
' ]- J/ Y" q. \: R  h  n

4 o# n7 \- X  R3 W关于如何寻找你的dom的xpath路径呢
/ q; C4 B, M$ }3 l4 n+ g3 \: c) [ 1.png
% m1 O* V/ a3 e% s此方法简单浏览器能帮你完成不要去写正则表达式好累!!!!!
& L# W6 Y) G5 q# [' G
0 M+ Q8 t3 ~( H9 Y  M9 p% X
商乾电商学院,中国最大的电商资源交流基地!
商乾全球电商人、电商交流学习与电商实战技术分享、电商爬虫、生活交流专业网站
  • 官方手机版

  • 微信公众号

  • 商务合作