Python 漂亮的汤没有加载整个页面

Python 漂亮的汤没有加载整个页面,python,beautifulsoup,web-crawler,Python,Beautifulsoup,Web Crawler,我有一个网页爬行脚本 import requests from lxml import html import bs4 res = requests.get('https://in.linkedin.com/in/ASAMPLEUSERNAME', headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 S

我有一个网页爬行脚本

import requests
from lxml import html
import bs4
res = requests.get('https://in.linkedin.com/in/ASAMPLEUSERNAME', headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'})

print(res.text)
请将代码中url中的“ASAMPLEUSERNAME”替换为某个虚拟linkedin用户


但是代码只提供了部分不完整(几乎没有)的网页源代码

正如BenG所说,内容是动态的。您可以通过查看源代码来了解这一点。很多html都包含“脚本”。您可以使用另一个库(如selenium)来加载动态元素

编辑:理论上,这就是使用selenium获取页面源代码的方法。实际上,这似乎有点困难。我被重定向到Linkedin的登录。但是您可以扩展代码以登录,然后获取页面的源代码。如果你需要帮助,请告诉我。请注意,要使此代码正常工作,您需要安装chrome,并且chromedriver位于显示yourdriver的路径上

from selenium import webdriver
driver = webdriver.Chrome(executable_path=yourdriver)
url ='https://in.linkedin.com/in/SOMEUSER'
driver.get(url)
html = driver.page_source

正如BenG所说,内容是动态的。您可以通过查看源代码来了解这一点。很多html都包含“脚本”。您可以使用另一个库(如selenium)来加载动态元素

编辑:理论上,这就是使用selenium获取页面源代码的方法。实际上,这似乎有点困难。我被重定向到Linkedin的登录。但是您可以扩展代码以登录,然后获取页面的源代码。如果你需要帮助,请告诉我。请注意,要使此代码正常工作,您需要安装chrome,并且chromedriver位于显示yourdriver的路径上

from selenium import webdriver
driver = webdriver.Chrome(executable_path=yourdriver)
url ='https://in.linkedin.com/in/SOMEUSER'
driver.get(url)
html = driver.page_source

其他答案建议使用Selenium,它适用于大多数网络抓取业务


但是,如果您担心速度,请转到javascript源代码,查找您感兴趣的实际内容的来源,可能是通过ajax请求。也许您可以直接访问API端点。

其他答案建议使用Selenium,它适用于大多数web抓取业务


但是,如果您担心速度,请转到javascript源代码,查找您感兴趣的实际内容的来源,可能是通过ajax请求。也许您可以直接访问API端点。

据我所知,您不使用BeautifulSoup。我想你需要这样的东西:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome(driverPath)
driver.get(url)
page = driver.execute_script('return document.body.innerHTML')
soup = BeautifulSoup(''.join(page), 'html.parser')

据我所知,你不使用BeautifulSoup。我想你需要这样的东西:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome(driverPath)
driver.get(url)
page = driver.execute_script('return document.body.innerHTML')
soup = BeautifulSoup(''.join(page), 'html.parser')

页面上内容的可能副本可能由客户端JavaScript生成,这就是
请求
库无法访问它的原因。这一点以前已经得到了回答,解决方案通常是使用Selenium获取页面,等待JS加载,然后从中删除页面源代码。客户端JavaScript可能会生成页面内容的副本,这就是
请求
库无法访问它的原因。这一点以前已经得到了回答,解决方案通常是使用Selenium获取页面,等待JS加载,然后从中删除页面源代码。
return document.body.innerHTML
代表什么?return document.body.innerHTML代表什么?