使用requests进行get只获取到了一部分html源码,下面是我的代码
def get_url(self,url=None,proxies=None): header = { 'User-Agent' : 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0', 'Content-Type': 'application/x-www-form-urlencoded', 'Connection' : 'Keep-Alive', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' } for prox in proxies: try: r=requests.get(url,proxies=prox,headers=header) if r.status_code!=200: continue else: print "使用{0}连接成功>>".format(prox) return r.content except Exception, e: return None
proxies参数是一个代理列表,这段代码会尝试使用proxies进行访问,访问成功就会返回
但是我获取到的页面源码不完整
여러 가지 이유가 있습니다
1. 일부 콘텐츠가 ajax를 통해 로드될 수 있습니다.
따라서 전체 프로필 내용은 request.get을 통해 얻을 수 없습니다.
이것이 이유인지 확인하려면 Firebug와 같은 도구를 사용하는 것이 좋습니다.
이 콘텐츠는 로그인해야만 볼 수 있나요?
내 코드는 페이지의 전체 콘텐츠를 가져올 수 있지만 요청의 프록시 매개변수를 사용하지 않습니다.
에이전트를 통하지 않고도 전체 콘텐츠를 얻을 수 있는지 확인해 보세요.
내 코드:
으아악우분투터도 잡았고..테마까지 설치했는데... 그냥 지나쳤어요...
1층의 답변은 매우 명확합니다. 반환된 웹페이지가 비동기적으로 로드된다는 점입니다. 비동기 요청이 있는지 확인하려면 fiddler를 사용하여 패킷을 캡처하는 것이 좋습니다.
문제 해결 방법을 알려드리겠습니다. [늙은 운전자는 불평하지 않는다]
1. Chrome의 네트워크 도구를 사용하여 패킷을 캡처하고(다른 도구도 사용 가능) 캡처한 결과와 응답을 비교합니다. 동일하다면 이 페이지를 js를 통해 렌더링해야 한다는 의미입니다.
2. 1단계의 결과가 일치하지 않는 경우 헤더의 다른 필드가 미치는 영향을 고려하세요. 일반적으로 쿠키는 액세스 권한에 영향을 미치고 사용자 에이전트는 DOM 구조와 콘텐츠에 영향을 미칩니다. 주로 이 두 가지 사항을 먼저 확인하세요. (특별한 처리가 필요한 이상한 헤더가 있을 수 있습니다)
3. IP 접근이 차단되는 등의 문제를 해결하기 위해 프록시 테스트 요청을 엽니다
4.JS 렌더링 페이지로 판단된 경우. 두 가지 해결 방법이 있습니다. 하나는 API 인터페이스를 캡처하는 것입니다(규칙을 발견하는 데 예민한 능력이 필요함). 패킷 캡처 방법은 1을 참조하세요. 두 번째는 서버에서 js 렌더링(관련 작업)을 직접 수행하여 최종 페이지 렌더링 결과를 얻는 것입니다.