我正在从一个网站(经过许可)抓取餐馆列表,我遇到了问题。来自网站的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有什么不同,以及我能做些什么。
提前致谢!
答案 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()