방금 웹을 시작한 파이썬으로 시작했는데 몇 가지 문제가 있습니다. BeautifulSoup 및 lxml에서 div 요소를 찾을 수 없습니다.
나는 웹 페이지의 소스를 다운로드 셀레늄을 사용하고 절약 시작 :from selenium import webdriver
driver= webdriver.Firefox()
driver.get("https://www.website.com")
f=open('output.txt','w')
f.write(driver.page_source.encode('utf-8'))
f.close()
driver.quit()
모든 것이 잘 작동하지만, 셀레늄 너무 많은 시간이 걸립니다, 그래서 첫 페이지 소스를 얻기 위해, 기계화 설정 :
여기import mechanize
browser = mechanize.Browser()
browser.set_handle_robots(False)
cookies = mechanize.CookieJar()
browser.set_cookiejar(cookies)
browser.addheaders = [('User-agent', 'Mozilla/5.0')]
browser.set_handle_refresh(False)
browser.open("https://www.website.com")
문제를 온다 :
from bs4 import BeautifulSoup as BS
soup= BS(browser.response().read(),'lxml')
print(soup.find(id="div_id"))
,691 : 나는 그것의 ID로 특정 사업부를 찾는 시도하는 경우, 그것은 나에게 아무것도 반환하지 않습니다
기계어로 얻은 소스 코드를 일반 텍스트 편집기로 검사하면 찾을 수 있습니다. 그것은 뭔가처럼 :
<div id="div_id" data referrer="div_id">
이 사업부는 다른 많은 자식 요소, 그것은 약 1/5 코드 "로"위치 해 있으며, 전체 소스 코드는 내가 대신 다른 사업부 근처를 찾는 시도 500kb.If에 관한 것입니다, 행운도. 반면에 소스 코드의 시작 부분에있는 div를 찾으면 발견 할 수 있습니다. 그리고 재미있는 점은, 셀 늄으로 얻은 소스 코드에서 얻은 소스 코드 대신 동일한 div (BS 포함)를 찾는다면 더욱 흥미로운 사실입니다. Mechanize를 사용하면 div를 텍스트 편집기로 검사하여 완전히 같아 보이지만 찾을 수 있습니다.
전 BS 지원 파서를 사용해 보았습니다. 운이 없었습니다. 그래서 나는 그것이 어쩌면 BS 함께 할 수있는 뭔가가 있다고 생각하고, 나는 LXML와 동일한 작업을 수행하려고 :
from lxml import etree
parser= etree.HTMLParser()
tree= etree.parse(open('source.txt'),parser)
results= tree.xpath('//div[@id="div_id"]')
print(etree.tostring(results[0]))
BS와 마찬가지로, 셀레늄을 얻을 소스 코드에서 사업부를 찾을 수 있었다, 그러나 기계화와. 그래서 나는 그것이, 기계화와 함께 할 수있는 뭔가가 있다고 생각하고 요청 사용 설정 : BS 또는 LXML 중 하나와 함께, 사업부에 대한 page.content에보고
import requests
from fake_useragent import UserAgent
ua=UserAgent()
url= 'https://www.website.com'
headers= {'User-agent': str(ua.chrome)}
page = requests.get(url, headers=headers)
을 다시 더 luck.It 내가 분석 여부를 발생하지 직접 응답을 보내거나 파일에 저장 한 다음 파일을 분석하는지 여부를 결정합니다.
그리고 나는 그것에 대해 생각합니다 ... 나는 Mechanize와 Requests 응답을 인코딩하려고 시도했습니다. 셀레늄으로 처리했으나 변경되지 않았습니다. 나도 다른 BS 버전 (3.x)을 사용했다. 변경하지 않았다.
요약하면 다음과 같습니다. - BS 나 lxml로 div를 Selenium을 통해 얻은 소스 코드로 찾으면 발견합니다. 다른 것들은 없습니다. - 소스 코드의 시작 부분에서 다른 div를 찾으면 BS 및 lxml이 코드를 가져 오는 데 사용 된 방법과 관계없이 해당 div를 찾습니다. - 검사 할 때 모든 경우에 div가 있습니다. 사용
버전 : -python : 2.7.9 -BeautifulSoup : 4.6.0 -Mechanize : 0.3.5 -Requests : 2.18.4 -Selenium : 3.5.0 -lxml : 4.0.0 -OS : linux debian
고맙습니다.
실제 URL을 알려 주시면 도움이됩니다. –
url : https://www.facebook.com/groups/1584160618524185/ div id : pagelet_forsale_island 감사합니다. – Bleracas