我正在从Web上爬行一些信息,但是当我使用Selenium和请求时却得到了不同的结果
硒
driver.get('https://www.jobplanet.co.kr/companies/322493/benefits/%EC%A7%80%EC%97%90%EC%9D%B4%EC%B9%98%EC%94%A8%EC%A7%80')
soup= BeautifulSoup(driver.page_source, 'html.parser')
sample= soup.find_all('div', class_='accord_hd')`
请求
response= requests.get('https://www.jobplanet.co.kr/companies/322493/benefits/%EC%A7%80%EC%97%90%EC%9D%B4%EC%B9%98%EC%94%A8%EC%A7%80')
soup= BeautifulSoup(response.content, 'html.parser')
sample= soup.find_all('div', class_='accord_hd')`
在使用Selenium时,它返回一个空列表。 但是在请求中,有一个包含一些字符串的列表。
我之前经历过类似的事情,所以我想知道这里发生了什么事情
答案 0 :(得分:1)
requests
将获取/返回初始的html源代码。
selenium
将模拟/自动化浏览器以打开网页,然后您可以拉出用于呈现网页的html源。
如果动态创建站点,则这2个之间的区别是requests
不支持该渲染/ java脚本。由于selenium实际上会打开浏览器显示页面,因此将允许页面在获取html源之前呈现其内容。
这就是为什么使用requests
与selenium
时可能会得到两种不同响应的原因。
但是,在上面给出的特定代码中,使用Selenium
和requests
可以得到完全相同的输出
代码:
from bs4 import BeautifulSoup
from selenium import webdriver
import requests
driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
driver.get('https://www.jobplanet.co.kr/companies/322493/benefits/%EC%A7%80%EC%97%90%EC%9D%B4%EC%B9%98%EC%94%A8%EC%A7%80')
soup= BeautifulSoup(driver.page_source, 'html.parser')
sample_selenium= soup.find_all('div', class_='accord_hd')
driver.close()
import requests
response = requests.get('https://www.jobplanet.co.kr/companies/322493/benefits/%EC%A7%80%EC%97%90%EC%9D%B4%EC%B9%98%EC%94%A8%EC%A7%80')
soup= BeautifulSoup(response.content, 'html.parser')
sample_requests= soup.find_all('div', class_='accord_hd')
print ('Selenium: %s items\nRequests: %s items' %(len(sample_selenium), len(sample_requests)))
输出:
Selenium: 11 items
Requests: 11 items