문제

모듈 'mechanize'와 함께 Python에서 화면 스크레이퍼 스크립트를 작성하고 있으며 javaScript : __ dopostback이있는 링크에서 mechanize.click_link () 메소드를 사용하고 싶습니다. 구문 분석하려는 페이지가 Ajax를 사용하고 있다고 생각합니다.

참고 : Mech는 Mechanize.browser ()입니다.

>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False

링크를 클릭 한 후 페이지 소스를 검색하고 싶습니다.

도움이 되었습니까?

해결책

나는 기계화를 사용하지 않지만 파이썬으로 자신을 긁는 많은 웹을합니다.

__dopostback과 같은 JavaScript 함수가 들어가면 다음을 수행합니다.
Firefox에서 웹 사이트에 액세스하고 httpfox extension POST의 매개 변수를 확인하려면 관련 링크를 클릭 할 때 브라우저가 웹 서버로 보낸 브라우저가 웹 서버로 전송됩니다.
그런 다음 urllib.parse.urlencode를 사용하여 Python에서 동일한 요청을 작성하여 필요한 쿼리 문자열과 게시물 데이터를 작성합니다.
때로는 웹 사이트가 쿠키를 사용하므로 Python의 http.cookiejar를 사용합니다.

이 기술을 여러 번 성공적으로 사용했습니다.

다른 팁

나는 생각하지 않는다 mechanize JavaScript를 지원합니다. 기능에 대한 본질적으로 JavaScript 실행에 의존하는 페이지를 긁어 내려면 다른 도구를 사용해야 할 수도 있습니다. 셀레늄 RC.

>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top