찾다

 >  Q&A  >  본문

python - 请教这个页面中的这两个信息能否不用无头浏览器爬取到?

在爬取"http://www.haodf.com/doctor/DE4r08xQdKSLBVM8i9sHYQ8uQGIO.htm"这个页面的时候, 发现"擅长"和"执业经历"这两个信息通过beautifulsoup是取不到的, 我选取这两个信息的代码如下:

soup.select('#full_DoctorSpecialize').get_text(strip=True)
soup.select('#full').get_text(strip=True)

查询页面发现这两个信息好像是通过JS查询的结果, 除了把网页全部正则表达式匹配的方法, 请教各位:
1, 这两个信息能否直接取到?
2, 除了类似"Selenium"这样的工具, 是否还有其他方式能够取到这两个信息?
3, 能否通过分析查询接口的方式解决?

谢谢

巴扎黑巴扎黑2781일 전556

모든 응답(3)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-18 10:20:55

    아마도 이 페이지에서는 페이지가 로드된 후 캡처하려는 데이터가 js를 사용하여 렌더링됩니다. 즉, 이 #full_DoctorSpecialize
    의 데이터는 ajax이며 서버에서 검색됩니다. 특히 그러한 데이터를 얻는 방법은 Baidu에서 phantomjs를 다운로드할 수 있으며 확실히 뭔가를 얻을 것입니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:20:55

    이 두 가지 정보는 직접 얻을 수 있는데, 해당 정보는 JS 블록 BigPipe.onPageletArrive({这个里面})에 포함되어 있으며 정규식을 통해 얻을 수 있습니다. 这个里面은 JSON 형식의 문자열입니다. 일치 후 json으로 변환하는 것은 처리하기 쉽습니다. 쿼리 인터페이스를 통해 얻으려면 가능해야 하지만 JS 코드를 분석해야 하는데 이는 너무 번거롭습니다. 패킷 캡처 도구를 사용하여 http 요청을 캡처할 수 있습니다. 그런 다음 해당 요청에서 반환된 데이터를 살펴보세요. 이에 비해 정규 매칭을 작성하는 것이 더 빠릅니다.

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 10:20:55

    위에서 언급한 대로 JS 렌더링입니다. JS 코드에 있는 요소를 정기적으로 일치시켜 원하는 정보를 얻을 수 있습니다.

    회신하다
    0
  • 취소회신하다