如何将刮掉的HTML与源代码区别开来?

时间:2016-05-13 06:50:04

标签: 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.get(url)
data = BeautifulSoup(r.text)
soup = data.find_all('span',{'class':'restaurant_name'})
print soup

现在我知道它不方便,但我不能显示HTML,因为公司不会让我。我只是想知道你们一般都知道python下载的html与源代码中的html有什么不同,以及我能做些什么。

提前致谢!

2 个答案:

答案 0 :(得分:3)

总之,javascript。您正在下载基本HTML页面,但您不是浏览器,并且您没有下载和运行浏览器运行的任何JavaScript代码。如今,许多网站都以一个非常小的HTML页面开始,并使用脚本来动态加载和显示来自服务器的其他数据。

答案 1 :(得分:2)

您可以将Selenium用于此目的。它将像您的浏览器一样在运行时呈现您的网页。你可以使用Selenium和firefox,chrome或phantomjs。

<强>硒

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

有关Selenium的更多信息,请在此处阅读http://selenium-python.readthedocs.io/ 我也为初学者发了关于Slenium的博客文章。也请检查一下http://blog.hassanmehmood.com/creating-your-first-crawler-in-python/

示例

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()