Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 刮取的HTML与源代码有何不同?_Python_Html_Web Scraping - Fatal编程技术网

Python 刮取的HTML与源代码有何不同?

Python 刮取的HTML与源代码有何不同?,python,html,web-scraping,Python,Html,Web Scraping,我正在从一个网站上抓取一张餐馆的名单(经允许),我遇到了一个问题。从网站上抓取的html python与源代码中的html不同。在他们的网站上,只有不到一半的餐馆是在python的html中找到的。这就是我的代码的样子: import requests from bs4 import BeautifulSoup from tempfile import TemporaryFile import xlwt url = 'https://www.example.com' r = requests

我正在从一个网站上抓取一张餐馆的名单(经允许),我遇到了一个问题。从网站上抓取的html python与源代码中的html不同。在他们的网站上,只有不到一半的餐馆是在python的html中找到的。这就是我的代码的样子:

import requests
from bs4 import BeautifulSoup
from tempfile import TemporaryFile
import xlwt

url = 'https://www.example.com'

r = requests.get(url)
data = BeautifulSoup(r.text)
soup = data.find_all('span',{'class':'restaurant_name'})
print soup
现在我知道这不方便,但我不能显示html,因为公司不允许我。我只是想知道你们是否知道python下载的html与源代码中的html有什么不同,以及我能做些什么


提前谢谢

一句话,javascript。您正在下载基本HTML页面,但您不是浏览器,也没有下载并运行浏览器将运行的任何javascript代码。现在很多网站都是从一个非常小的HTML页面开始,并使用脚本动态加载和显示来自服务器的附加数据。

您可以使用Selenium来实现这一目的。它将在运行时呈现网页,就像浏览器一样。您可以将Selenium与firefox、chrome或phantomjs一起使用

我们基本上使用selenium来完全呈现我们的web页面,因为大多数站点都是由现代JavaScript框架组成的。它主要用于开发爬虫/刮削器,以从网站的不同页面收集数据,或者Selenium也用于web自动化

更多关于硒的信息,请阅读这里 我还有一篇关于Slenium的博客文章,是为初学者准备的。也检查一下这个

示例

import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

profile_link = 'http://hassanmehmood.com'


class TitleScrapper(object):

    def __init__(self):

        fp = webdriver.FirefoxProfile()
        fp.set_preference("browser.startup.homepage_override.mstone", "ignore") #Avoid startup screen
        fp.set_preference("startup.homepage_welcome_url.additional",  "about:blank")

        self.driver = webdriver.Firefox(firefox_profile=fp)
        self.driver.set_window_size(1120, 550)

    def scrape_profile(self):
        self.driver.get(profile_link)
        print self.driver.title
        self.driver.close()

    def scrape(self):
        self.scrape_profile()


if __name__ == '__main__':
    scraper = TitleScrapper()
    scraper.scrape()

你还用什么方法来比较呢?您正在查看浏览器的DOM检查器吗?显示站点的当前状态,而不是初始源。如果站点通过AJAX加载数据,这两件事可能会有很大的不同。您是否考虑过使用Javascript动态添加餐厅?是的,我正在浏览器中查看inspector!我不知道这有什么不同!如何下载站点的当前状态?我不知道如何使用Javascript如何下载站点的当前状态?@titusflex检查上述答案,您必须使用selenium