Javascript php-webscraping-单击ajax调用,然后抓取页面(可以在python中完成)

Javascript php-webscraping-单击ajax调用,然后抓取页面(可以在python中完成),javascript,php,jquery,python,ajax,Javascript,Php,Jquery,Python,Ajax,我用python编写了一些代码,可以刮取一个页面,找到所有类名为“grouphead”的元素,然后单击它们生成一个包含所有ajax调用的页面。这在python中是可行的,但我想知道它是否可以在curl/php编码中实现 # Get scraping... tree = parseLxml(driver=driver, url=url) # Go to URL and parse elem = driver.find_elements_by_class_name('group-head') #

我用python编写了一些代码,可以刮取一个页面,找到所有类名为“grouphead”的元素,然后单击它们生成一个包含所有ajax调用的页面。这在python中是可行的,但我想知道它是否可以在curl/php编码中实现

 # Get scraping...
tree = parseLxml(driver=driver, url=url) # Go to URL and parse
elem = driver.find_elements_by_class_name('group-head') # Use ChromeDriver to find element to get to the Ajax call
for x in range(0,len(elem)): # Loop through all such elements
    try:  
        time.sleep(0.5)
        elem[x].click() # Click the element
        time.sleep(1.5) # Too fast and errors can occur, so wait...
    except:
        pass
newpage = driver.page_source # Need to get page source again now all visible
newtree = html.fromstring(newpage)
match = newtree.xpath('//td[contains(@class,"score-time")]/a/@href') # Scrape match link
base = 'http://uk.soccerway.com'
for m in match:
    mURL = base+str(m)
    print ('Match URL:',mURL)

您的代码正在使用ChromeDriver,因此您应该查找PHP绑定

看一看,你应该能够用同样的方式使用它。 未测试的代码,但应如下所示:

$host = 'http://localhost:4444/wd/hub'; // Selenium Host
$driver = ChromeDriver::create($host);
$driver->get($url); // Got to Url and Load Page
$elements = $driver->findElements(WebDriverBy::className('group-head'));
....

是的,这在PHP中是可能的:)

但是你必须遵循这些步骤

1) 从for PHP下载Dom解析器

2) 单击页面中的链接时,您可以使用ajax调用,它可以获取文件
(file\u get\u html)
的内容

3) 最后使用其id、元素、类名获取所需的数据

$html = file_get_html('http://www.google.com/');

// Find all images 
foreach($html->find('img') as $element) 
       echo $element->src . '<br>';

// Find all links 
foreach($html->find('a') as $element) 
       echo $element->href . '<br>';
$html=file\u get\u html('http://www.google.com/');
//查找所有图像
foreach($html->find('img')作为$element)
echo$element->src'
'; //查找所有链接 foreach($html->find('a')作为$element) echo$element->href
';
我已经用PHP从后端抓取了相当多的内容。我推荐。刮取它,找到元素,然后通过执行文件获取内容或使用curl打开新页面来“单击”它们。不过要小心,标题/cookies和加载javascript的内容可能真的会通过你关闭。我如何使用元素自己打开页面??使用PHP打开文件的任何标准方式-file_get_contents或CURL(90%的情况下我更喜欢第一种方式)。我已经尝试了上述方法,但它似乎没有根据需要启动ajax。。。您能提供一些示例代码吗?通过
单击ajax调用
,您的意思是说在运行时动态评估
javascript
代码,那么即使在
python
中也不是那么简单。在
python
中,有一些xml-dom解析库,如
lxml
BeautifulSoup
,但要在代码中单击ajax按钮,需要一个合适的抓取框架,如
mechanize
。我不知道在
php
中有这样的框架。如果您可以使用
node.js
JavaScript平台,那么您可以使用
mechanize
phantomjs
。那么这是否意味着通过php脚本运行phthon脚本?不,使用PhpWebDriver for Selenium,您可以像在phpy中使用Python一样调用相同的ChromeDriver,javascript将不会被执行,并且您无法单击链接来启动ajax调用。我希望页面中的ajax调用和js没有解决这个问题。但是要在页面中获得一些信息,这正是问题所在:如何动态触发ajax调用并获取页面的更新源。