我正在开展一个项目,我需要抓取几个网站并从中收集不同类型的信息。文本,链接,图像等信息
我正在使用Python。我在HTML页面上为此目的尝试了BeautifulSoup并且它可以工作,但是在解析包含大量JavaScript的网站时我很困难,因为这些文件的大部分信息都存储在<script>
标记中。
任何想法如何做到这一点?
如果页面加载中涉及大量的javascript动态加载,事情变得更加复杂。
基本上,您有三种方法可以从网站抓取数据:
另外看看Scrapy web-scraping框架 - 它也不处理AJAX调用,但这确实是我曾经使用过的网络抓取世界中最好的工具。
另请参阅以下资源:
希望有所帮助。
为了让您开始使用selenium和BeautifulSoup:
使用npm安装phantomjs(节点包管理器):
apt-get install nodejs
npm install phantomjs
安装硒:
pip install selenium
得到这样的结果页面,像往常一样用beautifulSoup解析:
from BeautifulSoup4 import BeautifulSoup as bs
from selenium import webdriver
client = webdriver.PhantomJS()
client.get("http://foo")
soup = bs(client.page_source)
一个非常快的方法是迭代所有标签并获取textContent
这是JS片段:
page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent;
或者在selenium / python中:
import selenium
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://ranprieur.com")
pagetext = driver.execute_script('page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent; return page;')